【问题标题】: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.
    

    注意:未测试

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2020-03-16
      • 1970-01-01
      • 2021-09-14
      • 2021-12-30
      • 1970-01-01
      • 2023-02-13
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多