【问题标题】:Search based on foreign key in LaravelLaravel中基于外键的搜索
【发布时间】:2018-02-22 13:03:51
【问题描述】:
Laravel 5.*
我的Case 模型与Customer 模型具有一对一的关系,定义如下:
public function customer
{
return $this->hasOne(Customer::class, 'id', 'customer');
}
在案例列表(cases.index)中,它显示基于关系$case->customer->name的客户名称。
我正在尝试根据客户名称创建搜索并列出所有案例。
是否有基于关系的本地搜索方式?
【问题讨论】:
标签:
php
mysql
laravel
laravel-5
laravel-eloquent
【解决方案1】:
使用whereHas() 方法。例如:
Case::whereHas('customer', function($q) use($name) {
$q->where('name', 'like', '%' . $name . '%');
})->get();
【解决方案2】:
您可以通过scopes 实现这一点,将此代码放入您的客户模型中:
public function scopeOfName($query, $name) {
$query->where('name', 'like', '%' . $name . '%');
}
那么你可以这样访问它:
$case = Case::with(['customer' => function($query) use ($customerName) {
$query->ofName($customerName);
}]);