Laravel: where 声明 on with 关系
Laravel: where statement on with relationship
我想在 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 语句。
希望你们中的一位能帮助我。
那是因为过滤了关系(单独的查询)而不是查询本身。
$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();
试试这个
$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
函数。
我想在 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 语句。
希望你们中的一位能帮助我。
那是因为过滤了关系(单独的查询)而不是查询本身。
$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();
试试这个
$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
函数。