在Laravel中基于外键搜索

时间:2018-02-22 13:03:52

标签: php mysql laravel laravel-5 laravel-eloquent

Laravel 5。*

我的Case模型与Customer模型具有一对一关系,定义如下:

public function customer
{
   return $this->hasOne(Customer::class, 'id', 'customer');
}

在案例列表(cases.index)中,它根据关系$case->customer->name显示客户名称。

我正在尝试创建搜索并根据客户名列出所有案例。

是否存在基于关系进行搜索的本地方式?

2 个答案:

答案 0 :(得分:2)

使用whereHas()方法。例如:

Case::whereHas('customer', function($q) use($name) {
    $q->where('name', 'like', '%' . $name . '%');
})->get();

答案 1 :(得分:1)

您可以通过scopes实现这一目标,将此代码放入您的客户模型中:

 public function scopeOfName($query, $name) {
      $query->where('name', 'like', '%' . $name . '%');
 }

然后你会这样访问它:

 $case = Case::with(['customer' => function($query) use ($customerName) {
    $query->ofName($customerName);
 }]);