如何在laravel中将count(*)设置为字段名称

时间:2018-02-21 09:28:31

标签: php mysql laravel eloquent

我正在使用拉威尔雄辩。 我正在使用模型使用此查询。我的代码是

$books = Book::select('title', 'author', Book::raw('count(*) as copies'))
              ->where('title', 'like', '%'.$name.'%')
              ->orWhere(function ($query) use ($name) {
                $query->where('author', 'like', '%'.$name.'%')
                      ->where('subject', 'like', '%'.$name.'%');
            })
            ->groupBy('title','author')
            ->get();

我收到了错误 " strtolower()期望参数1为字符串,对象为" 我知道错误在 count( 中。代码 原始('计数( )作为副本')用于表格。 但我不知道如何在模型雄辩中使用 count(*)作为副本。我的型号名称是预订。 我还有一个疑问,我们可以在groupBy中使用多个字段,即 的 GROUPBY('标题''作者&#39)

2 个答案:

答案 0 :(得分:2)

使用selectRaw()

$books = Book::select('title', 'author'))
          ->where('title', 'like', '%'.$name.'%')
          ->orWhere(function ($query) use ($name) {
            $query->where('author', 'like', '%'.$name.'%')
                  ->where('subject', 'like', '%'.$name.'%');
        })
         ->selectRaw('count(*) as copies')
        ->groupBy('title','author')
        ->get();

答案 1 :(得分:1)

试试这个,SelectRaw

$books = Book::select('title', 'author')
    ->selectRaw('count(*) as copies')
    ->where('title', 'like', '%'.$name.'%')
    ->orWhere(function ($query) use ($name) {
        $query->where('author', 'like', '%'.$name.'%')
            ->where('subject', 'like', '%'.$name.'%');
        })
    ->groupBy('title','author')
->get();

你也有这个可能性

->select('title','author', DB::raw('count(*) as copies'))

Laravel Documentation Raw