【问题标题】:Laravel 5.1 Eager Loading Cannot do additional whereLaravel 5.1 Eager Loading 不能做额外的地方
【发布时间】:2017-06-20 15:20:47
【问题描述】:

我不知道我在这里做错了什么,但是这段代码

$models = Model::with(['relationship' => function ($query) {
        $query->whereBetween('date', [$this->today->copy()->startOfDay(), $this->today->copy()->endOfDay()]);
    }])->where('status', 'active')->where('position', '!=', 'dev')->where('status', '=', 'good')->get();

没有按预期工作。它确实渴望加载它存在于对象中的关系,但问题是我不能做这样的事情

foreach($models as $model)
    {
        echo $model->relationship->where('status', '=', 'somestatus')->count() . '<br>';
    }

它返回 0 但是当我签入集合时它不是 0。你们知道为什么这段代码不起作用吗?谢谢各位。

【问题讨论】:

  • foreach 循环中的where 将在集合而不是数据库上完成,因为模型关系已被急切加载。
  • 是的,但它应该以正确的方式计算。因为它返回具有不同状态的关系,我只想计算那些具有所需状态的人,但它似乎没有这样做。
  • 尝试在 where 语句中不使用 '='$model-&gt;relationship-&gt;where('status', 'somestatus')-&gt;count()。在文档中它只需要 2 个参数。 laravel.com/docs/5.4/collections#method-where
  • @devk 还是一样。第二个参数是两个给定参数是 =、!=、> 或
  • @devk 您可以将其发布为答案吗?所以我可以让它成为正确的答案

标签: php laravel eloquent laravel-5.1 eager-loading


【解决方案1】:

您需要从您的-&gt;relationship-&gt;where('status', 'somestatus') 中删除'='(中间参数)。因为你是在一个集合上做的it only takes 2 parameters

像这样:

foreach($models as $model)
{
    echo $model->relationship->where('status', 'somestatus')->count() . '<br>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2017-08-19
    • 1970-01-01
    • 2014-07-18
    • 2014-12-07
    • 2020-05-23
    • 2020-11-09
    相关资源
    最近更新 更多