【问题标题】:Laravel with-count subquery without relationLaravel 有计数的子查询,没有关系
【发布时间】:2019-05-11 19:27:45
【问题描述】:
我的目标是在另一个没有关系的表中收集具有匹配数量 book.names 的书籍
我得到这样的收藏
$books = Books::paginate(20);
我现在需要的是获取这样的匹配数
SELECT COUNT(*) FROM `posts` WHERE `body` LIKE '%book.name%'
如何使用一个查询来做到这一点,并避免对每个模型进行不必要的查询,例如急切加载
【问题讨论】:
标签:
laravel
count
eloquent
relation
【解决方案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.
注意:未测试