Laravel ORM“with”即使有约束也会返回所有行

时间:2013-08-17 07:22:01

标签: php orm laravel laravel-4

使用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我应该能够添加一个约束。好像我正在密切关注文档。提前谢谢。

1 个答案:

答案 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的书的“章节/页面”。