使用來自https://github.com/snipe/laravel4-starter的Laravel 4.1入門工具包,我有2個模型:類別和興趣。兩者都是可以刪除的。我希望索引視圖根據用戶的願望顯示3個不同的列表:「全部顯示」,「顯示刪除」和「顯示未刪除」。 一切都很好,直到我在它們之間添加了HasMany/BelongsTo關係。如何在Laravel 4中查詢和過濾軟刪除的Eloquent模型
機型:
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個部分。我懷疑這個解決方案會涉及到某種急切的加載,但即使經過一些非常強大的谷歌搜索和實驗,正確的咒語仍然沒有我....
特別要點:如何加載所有興趣是非 - 軟刪除同時過濾掉軟刪除類別的興趣?
謝謝。
你的答案的第二部分工作得到額外的分數。不幸的是我的問題的主要部分依然存在。 '$ interest = Interest :: with('category') - > onlyTrashed() - > get();'加載所有被刪除的興趣並預加載他們的類別。問題是它只預先加載未刪除的類別。所以這個觀點仍然存在。我想加載興趣並預加載類別,即使這些類別被刪除。這裏'onlyTrashed()'被應用到查詢的興趣部分。 – CodeMonkey 2014-10-11 17:53:27
然後改述你的問題,因爲這不是你要求的。無論如何,檢查編輯如何在急切的加載查詢中應用任何內容。注意,你仍然可以擁有沒有'category'相關(無論是否被刪除)的'interest',所以基本上你想檢查那個關係上的'null'。 – 2014-10-11 18:07:51
謝謝,那正是我的尋找。出於好奇,你會如何解釋這個問題? – CodeMonkey 2014-10-11 19:45:17