0

使用 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());
    }

我得到的输出是每一本书的每一章每一页。我只想拉那本书的章节和页面。

根据文档,我应该能够添加约束。好像我非常密切地关注文档。提前致谢。

4

1 回答 1

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();

因为与 mean 的关系,它只获取定义为 3 的书的“章节/页”。

于 2013-08-17T07:50:05.723 回答