Laravel Eloquent 搜索多个字段和关系
Laravel Eloquent search multiple fields and relationship
我正在尝试创建一个搜索查询,以便我可以在几个不同的字段中搜索相同的字符串。该查询还需要从 machine_warranties
中搜索字段,该 machine_warranties
在 Machines
模型上设置为 hasOne 关系。
这是机器模型中的保修关系
public function warranty()
{
return $this->hasOne('App\MachineWarranty', 'machine_id');
}
这是我对查询的尝试。搜索序列号或机器类型工作正常,但我不知道如何搜索关系。
Machine::orderBy('created_at', 'desc')
->where('serial', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->with(['warranty' => function($query) use ($search) {
$query->where('first_name', 'LIKE', '%' . $search . '%');
}]);
有没有办法->orWith()
可能?
使用orWhereHas()
方法:
Machine::latest()
->where('serial', 'like', '%' . $search . '%')
->orWhere('type', 'like', '%' . $search . '%')
->orWhereHas('warranty', function($q) use($search) {
$q->where('first_name', 'like', '%' . $search . '%');
})
->get();
使用whereHas()
进行and
查询:
Machine::orderBy('created_at', 'desc')
->where('serial', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->with('warranty')
->whereHas('warranty' , function($query) use ($search) {
$query->where('first_name', 'LIKE', '%' . $search . '%');
})->get();
我正在尝试创建一个搜索查询,以便我可以在几个不同的字段中搜索相同的字符串。该查询还需要从 machine_warranties
中搜索字段,该 machine_warranties
在 Machines
模型上设置为 hasOne 关系。
这是机器模型中的保修关系
public function warranty()
{
return $this->hasOne('App\MachineWarranty', 'machine_id');
}
这是我对查询的尝试。搜索序列号或机器类型工作正常,但我不知道如何搜索关系。
Machine::orderBy('created_at', 'desc')
->where('serial', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->with(['warranty' => function($query) use ($search) {
$query->where('first_name', 'LIKE', '%' . $search . '%');
}]);
有没有办法->orWith()
可能?
使用orWhereHas()
方法:
Machine::latest()
->where('serial', 'like', '%' . $search . '%')
->orWhere('type', 'like', '%' . $search . '%')
->orWhereHas('warranty', function($q) use($search) {
$q->where('first_name', 'like', '%' . $search . '%');
})
->get();
使用whereHas()
进行and
查询:
Machine::orderBy('created_at', 'desc')
->where('serial', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->with('warranty')
->whereHas('warranty' , function($query) use ($search) {
$query->where('first_name', 'LIKE', '%' . $search . '%');
})->get();