【问题标题】:Laravel: where statement on with relationshipLaravel:关于与关系的声明
【发布时间】:2021-08-20 15:41:40
【问题描述】:

我想在 laravel 中使用多个关系和多个 where 语句在关系上进行查询,但它并不顺利。

这是我的代码。

$orders = Order::with("customer")
            ->with("user")
            ->with("measuring_user")
            ->where("description", "like", "%" . $search . "%")
            ->orWhere("customers.name", "like", "%" . $search . "%")
            ->get();

我收到以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'customers.name' in 'where clause' (SQL: select * from `orders` where (`description` like %% or `customers`.`name` like %%) and `orders`.`deleted_at` is null)

查询应该过滤两个条件之一为真的订单。

当我在 with 函数中执行 customer where 语句时,它也不起作用:

    $orders = Order::with(["customer" => function($query) use ($search) {
        $query->where("name", "like", "%" . $search . "%");
    }])
    ->with("user")
    ->with("measuring_user")
    ->where("description", "like", "%" . $search . "%")
    ->get();

在这种情况下,它会找到一些没有客户的订单。它对关系而不是整个订单查询执行 where 语句。

希望你们能帮助我。

【问题讨论】:

标签: mysql laravel eloquent eager-loading eloquent-relationship


【解决方案1】:

这是因为过滤了关系(单独的查询)而不是查询本身。

$filterCustomer = function($query) use ($search) {
    $query->where('name', 'like', '%' . $search . '%');
};
$orders = Order::with([
        'customer' => $filterCustomer,
        'user',
        'measuring_user'
    ])
    ->where('description', 'like', '%' . $search . '%')
    ->whereHas('customer', $filterCustomer)
    ->get();

【讨论】:

  • 这对我帮助很大,感谢您的帮助!
【解决方案2】:

试试这个

$orders = Order::with('customer', 'user', 'measuring_user')->whereHas('customer', 
  function($q) use ($search) {
    return $q->where('name', 'like', '%' . $search . '%');
  })->where('description', 'like', '%' . $search . '%')->get();

您可以使用逗号分隔的值(如上)将多个关系传递给它,而不是使用多个 with 函数。

要查询关系,请使用whereHas 函数。

【讨论】:

  • 也感谢您的回答。好的;我不知道查询应该使用 whereHas 的关系。很高兴知道。再次感谢!
  • @Henk-JanLeusink 很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2017-03-04
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
相关资源
最近更新 更多