没有关联的Laravel有计数子查询

时间:2018-12-10 20:48:42

标签: laravel count eloquent relation

我的目标是在没有关系的另一个表中获取具有匹配的book.name数量的书的收藏

我得到这样的收藏

$books = Books::paginate(20);

我现在需要的是获取这样的比赛计数

SELECT COUNT(*) FROM `posts` WHERE `body` LIKE '%book.name%'

如何使用一个查询来执行此操作,并避免对每个模型进行不必要的查询,例如急于加载

1 个答案:

答案 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.

注意:未经测试