有人可以为我解释这个Laravel代码吗?

时间:2019-06-07 06:08:09

标签: php laravel laravel-5 eloquent

我有一些类似下面的代码,我想问的是使用完全相同的// dd($example->count()) #10为何将dd()放在每行不同的地方?我从未重新分配的$example事件会发生什么变化?

$example = $car->wheels()->whereBetween(
        'created_at',
        [
            $starDay->format('Y-m-d h:i:s'),
            $today->format('Y-m-d h:i:s')
        ]
    )

$total =  $example->count();

// dd($example->count()) #10

$totalSuccess = $example->where('status', 'good')->count();

// dd($example->count()) # 5

$colors = $example->select('color', DB::raw('count(*) as total'))
        ->groupBy('color')
        ->get()
        ->toArray();

// dd($example->count()) # []

1 个答案:

答案 0 :(得分:3)

值更改是因为每次您向查询中添加越来越多的不同子句(如where)。这些调用实际上更改了查询对象本身,并且更改仍然存在。

  1. 首先,您在$example中只有whereBetween子句的查询对象。它返回数据库中10行的计数。
  2. 然后将where('status', 'good')添加到查询中,它将选择范围进一步缩小到5行。
  3. 最后,您通过$exampleselect(...)调用更改了groupBy()查询。

在Laravel中,当您向其中添加查询构造时,查询生成器对象会被变异。因此,当您调用$example->where(...)时,您的$example查询构建器对象现在将具有该where子句。