使用来自https://github.com/snipe/laravel4-starter的Laravel 4.1 入门套件,我有 2 个模型:类别和兴趣。两者也是可软删除的。我希望索引视图根据用户的意愿显示 3 个不同的列表:“显示全部”、“显示已删除”和“显示未删除”。一切都很好,直到我在它们之间添加了 HasMany/BelongsTo 关系。
楷模:
class Category extends Elegant
{
protected $softDelete = true;
public function interests()
{
return $this->hasMany('Interest');
}
}
class Interest extends Elegant
{
protected $softDelete = true;
public function category()
{
return $this->belongsTo('Category');
}
}
现在,当视图调用$interest->category->name
属于软删除类别的兴趣时,一切都会以ErrorException: Trying to get property of non-object
. 我怀疑这是因为它$interest->category
是 NULL 因为它被软删除后没有被加载。
控制器:
class InterestsController extends AdminController
{
public function getIndex()
{
$showDisabled = Utility::GetShowDisabled();
switch ($showDisabled) {
case 'only':
// How to load *only* soft-deleted Interest with their categories
// even if the category has been soft-deleted?
$interests = Interest::onlyTrashed()->orderBy('name')->paginate(10);
break;
case 'with':
// How to load *all* Interests with their categories
// even if the category has been soft-deleted?
$interests = Interest::withTrashed()->orderBy('name')->paginate(10);
break;
default:
// How to load *only* *NON-soft-delted* Interests with their categories
// even if the category has been soft-deleted?
$interests = Interest::orderBy('name')->paginate(10);
break;
}
return View::make('backend/interests/index', compact('interests', 'showDisabled'));
}
请参阅我在 switch 语句的每 3 个部分中提出的问题。我怀疑该解决方案将涉及某种急切的加载,但即使经过一些非常激烈的谷歌搜索和实验,我仍然无法找到正确的咒语......
额外点:如何在过滤掉具有软删除类别的兴趣时加载所有非软删除的兴趣?
谢谢你。