我对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 ;作者财产)
我希望你能理解我想问的问题。
祝你好运
答案 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();