使用Laravel 4 Eloquent ORM,任何想法为什么以下是拉每一行而不是我要求的那一行(book_id = 3)?
if ($Book = Book::find(3)) {
return (Book::with(array('chapters.pages' => function($query)
{
$query->where('book_id', '=', 3 ); // hard-coded id for illustration purposes
})
)->get()->toJson());
}
我得到的输出是每一章和每一页的每本书。我只想用章节和页面来拉这本书。
根据documentation我应该能够添加一个约束。好像我正在密切关注文档。提前谢谢。
答案 0 :(得分:1)
我认为问题是你要求Book::with()
- 但你没有对Book()本身施加约束。所以你需要做Book::with()->where()
这是否有效
Book::with(array('chapters.pages' => function($query)
{
$query->where('book_id', '=', 3 ); // hard-coded id for illustration purposes
})
)->where('id', '=', '3')->get()->toJson());
请注意->where()
- 它将id约束放在查询上。
编辑:如果您有正确定义的关系(例如HasMany()等) - 那么这应该有效:
$books = Book::with('chapters.pages')->where('id', '=', '3')->get();
因为它与平均值的关系只能通过定义得到id为3的书的“章节/页面”。