我想返回一個Laravel集合對象的關係,其中得到的集合是基於嵌套標準(即嵌套模型的字段值)。因此,這將是這個樣子:Laravel集合渴望加載基於嵌套關係字段值
用戶 - >類別 - >發表 - >評論哪裏comment.active == 1
在這種情況下,我想要的結果,包括所有的特定用戶的categories => posts => comments
,評論處於活動狀態。如果它處於活動狀態,它將嵌套在適當的層次結構中(Category->Post->Comment
)。如果評論不活躍,則任何相關的帖子和潛在類別(如果沒有其他活動評論的帖子)都不應該顯示在該集合中。
我試過急於通過with()
,load()
和filter()
加載沒有運氣。他們將繼續加載與空評論關係的關係。尋找有關研究的指導:加入?過濾器?先進的雞蛋嵌套?
一個嘗試:
$user->categories->filter(function($category) {
return $category->isActive();
});
在我的模型我所有的關係設置適當的,而且除了我所建立isActive()如下:
// Category model
public function isActive() {
$active = $this->posts->filter(function($post) {
return $post->isActive();
}
}
// Post model
public function isActive() {
return (boolean) $this->comments()->where('active', 1)->count();
}
這按預期工作,但它還包括急切加載的嵌套關係,其中註釋的有效字段爲0.顯然,我以錯誤的方式執行此操作,但會欣賞任何方向。
的另一種嘗試:
User::with(['categories.posts.comments' => function($q) {
$q->where('active', 1);
}])->find(1);
不幸的是,這還加載有沒有活動的意見的關係(類別和職位)。用'categories.posts.isActive'取代關係也無效。
沒有任何代碼,沒有人可以指導你,發佈相關的型號代碼。 –