Laravel渴望加载组合多个表的位置

时间:2017-03-31 09:34:39

标签: sql laravel eloquent eager-loading laravel-eloquent

我对Laravel急切加载有疑问,我想搜索多个到一个相关的表。

我有两个模型,书和作者。 我有关系belongsTo(在Book模型中)和hasMany(在作者模型中)。

Books: id, title, description, author, tags, type
Author: id, name, birth, tags, type

(这不是真正的专栏,我有很多专栏,这只是举例)

我必须使用模型进行搜索,我不能使用数据库或原始查询进行搜索。

所以,我的问题是如何通过父表搜索到Model-> with()函数?

Model->with('author', function($query) use($search) {
    $query->where('author.name', '=', $search);
    $query->orWhere('book.title', '=', $search);
});

重要的是我需要获取图书,我必须能够使用$ book->作者(或者使用$ results-> toArray()来获取所有包含作者数据的图书数据 - &gt ;作者财产)

我希望你能理解我想问的问题。

祝你好运

2 个答案:

答案 0 :(得分:2)

您可以使用whereHas()按作者姓名搜索,lastUpdate '0000-00-00 00:00:00'也可以按书名搜索:

orWhere()

因此,此查询将查找具有已定义标题或作者姓名的所有书籍。如果您还需要加载作者数据,请将Book::whereHas('author', function($q) use($search) { $q->where('name', 'like', '%'.$search.'%'); }) ->orWhere('title', 'like', '%'.$search.'%') ->get(); 添加到查询中。

答案 1 :(得分:1)

使用来急切加载作者, whereHas 来过滤记录。

Book::with('author', function($query) use($search) {
    $query->where('name', '=', $search);
})->whereHas('author', function($query) use($search) {
    $query->where('name', '=', $search);
})
 ->where('title', '=', $search)
 ->get();