我有一个表格,其输入字段充当过滤器。 Orders表和Users表中的值具有关系。
e.g:
Order Id | User Full Name | Order Price | Date |
[order filter] [user name filter] [order date filter]
如何通过关系过滤用户表中的值?
这当然会返回错误:
public function name($name)
{
return $this->builder->where('name', 'LIKE', '%$name%')->orWhere('surname', 'LIKE', '%$name%');
}
错误:
QueryException in Connection.php line 770:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'where clause' (SQL: select count(*) as aggregate from `orders` where (`name` LIKE %$name% or `surname` LIKE %$name%))
答案 0 :(得分:4)
您可以将条件直接添加到查询构建器或创建范围。
将此添加到您的订单模型。
592193d6470e6cf80d3c9874
像这样使用
public function scopeFilterUser($query, $name)
{
return $query->whereHas('user', function ($q) use ($name) {
$q->where('name', 'like', "%{$name}%")
->orWhere('surname', 'like', "%{$name}%");
});
}
直接申请条件。
$orders = Order::filterUser($name)->get();
编辑:根据您的过滤方法。
$orders = Order::whereHas('user', function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%")
->orWhere('surname', 'like', "%{$name}%");
})->get();