我的目标是在没有关系的另一个表中获取具有匹配的book.name数量的书的收藏
我得到这样的收藏
$books = Books::paginate(20);
我现在需要的是获取这样的比赛计数
SELECT COUNT(*) FROM `posts` WHERE `body` LIKE '%book.name%'
如何使用一个查询来执行此操作,并避免对每个模型进行不必要的查询,例如急于加载
答案 0 :(得分:1)
您可以在不加载所有帖子的情况下进行快速加载。有一种名为withCount
Books.php
public function posts() {
return $this->hasMany(Post::class, 'post_id', 'id');
}
查找与图书相关的所有帖子的一种方法是
$books = Books::withCount(['posts' => function ($query) use($searchTerm) {
$query->where('body', 'like', $searchTerm);
}])->get();
//How to retrieve
$book = $books->first()->posts_count.
您可以在laravel文档website.中找到有关withCount的更多信息
方法2:不加急加载
$books = Books::select('*')->addSelect(DB::raw("SELECT COUNT(*) as post_count FROM `posts` WHERE `body` LIKE '%book.name%' ")->get(); //This will return collection with post_count.
注意:未经测试