Laravel:具有关系的查询构建器

时间:2017-05-21 14:30:14

标签: php mysql laravel

我有一个表格,其输入字段充当过滤器。 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%))

1 个答案:

答案 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();