【问题标题】:Someone can explain for me this Laravel code?有人可以为我解释这个 Laravel 代码吗?
【发布时间】:2019-06-07 06:08:09
【问题描述】:

我有一些类似下面的代码,我想问的是完全相同的// 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()) # []

【问题讨论】:

  • 我猜count() 是一个对象方法。并且每次我们调用count() 时都会更改$example 对象count 属性。这就是我们调用相同的 dd($example->count()) 但返回不同值的原因......

标签: php laravel laravel-5 eloquent


【解决方案1】:

值会发生变化,因为每次您向查询中添加越来越多不同的子句(如where)。这些调用实际上会更改查询对象本身,并且更改会持续存在。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2022-12-16
    • 2019-02-01
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多