【问题标题】:Laravel Nova - Problems with distinct()Laravel Nova - distinct() 的问题
【发布时间】:2018-10-22 21:53:28
【问题描述】:

我正在使用 Laravel Nova 生成指标,在这种情况下特别是趋势。这是我的代码:

$builder = order::query()->select('cook_id')->distinct();
return $this->countByDays($request, $builder)->showLatestValue();

但是这返回 6 - 但它应该是 4。

是的,有 6 行,但其中 4 行具有相同的“cook_id”,因此不同的调用应该消除其中的 2 行。

重申一下,这是 Laravel Nova 的“趋势”指标。

谢谢

【问题讨论】:

  • 您找到解决方案了吗?

标签: laravel laravel-nova


【解决方案1】:

我知道这是一篇旧帖子,但对于遇到相同问题的任何人,您可以使用原始表达式来允许不同的查询。

public function calculate(NovaRequest $request)
{

    return $this->aggregate($request,
        order::class,
        self::BY_DAYS,
        'count',
        DB::raw('distinct cook_id'),
    );
}

通过使用 DB::raw,nova 将按原样接受列,而不是尝试包装它。

【讨论】:

  • 有什么方法可以完全覆盖并显示基于自定义查询的结果?
【解决方案2】:

尝试使用 groupBy

$builder = order::distinct()->select('cook_id')->groupBy('cook_id')->get();

同样在database.php 设置mysql strict 为false

'mysql' => [
    ...
    'strict' => false
]

【讨论】:

  • 谢谢,请问为什么要设置mySql为false?这是做什么的?
  • 再次感谢,我现在已经尝试了您的解决方案,它产生的结果与我在查询的所有其他变体中看到的结果相同。它计算 2 行与 2 相同的厨师 ID,而不是 1。
  • 你可以在这里阅读关于严格模式mattstauffer.com/blog/…
  • 也可以试试 distinct('cook_id') 和 groupBy('cook_id')
  • 不-我很感谢您在这里的帮助,但似乎这个“趋势”功能完全忽略了不同。真让人抓狂。我已经以任何可以想象的方式编写了查询......并且有很多方法可以编写它。没有工作。
猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2019-06-13
相关资源
最近更新 更多