【问题标题】:Wheredoesnthave relation in LaravelLaravel 中的 Wheredoesnthave 关系
【发布时间】:2017-11-14 08:25:01
【问题描述】:

我在使用 Eloquent/Laravel 进行查询时遇到问题。

这是我的模型: 一个请求有零个或多个提议。报价可以隐藏(这是报价上设置的属性)。

我需要做的是检索所有有或没有报价的请求。但是,如果有关联的报价,报价需要具有属性 hide=false。

我尝试了以下方法,但似乎不起作用。

$requests = Request::whereDoesntHave('offers', function ($query) use ($hideStatus) {
   $query->where('hide', true);
})->get();

我认为它只会向我返回根本没有报价的请求。

有什么想法吗?

仅供参考,我有 Laravel 5.4

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 我认为您应该编写 2 个单独的查询,其中 1 个将过滤带有 hide=false 的报价数据,另一个查询报价不存在
  • 是的....我认为在下面@Saumini 的回复下,我们处于良好的轨道上,但仍然不是 100% 那里..可能是一些语法错误..

标签: php laravel eloquent


【解决方案1】:

检查以下查询。我没有测试查询,是用我所拥有的知识编写的。

$requests = Request::whereHas('offers', function ($query) {
                    $query->where('hide', false);
                })
                ->orDoesntHave('offers')
                ->get();

【讨论】:

  • 感谢您的回复。不幸的是,这不起作用。我收到错误调用未定义的方法 Illuminate\Database\Query\Builder::orDoesntHave()。
【解决方案2】:

感谢大家的回复。 “orDoesntHave”不起作用。相反,以下方法似乎有效:

$requests = Request::whereHas('offers', function ($query) {
                $query->where('hide', false);
            })
            ->doesntHave('offers', 'or')
            ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2015-03-19
    • 2020-11-13
    • 2012-12-26
    • 2020-02-22
    • 2015-11-13
    • 2016-02-12
    相关资源
    最近更新 更多