我具有以下结构。用户注册时,他选择一个国家。他创建了一个帖子。我想搜索具有搜索关键字的特定国家/地区的所有帖子。搜索关键字可以是标题,型号,价格等。很好。
但是,我也希望能够搜索品牌名称。但是与其他字段不同,品牌名称不会直接保存在我的表中,而是会保存一个ID,以便从其他表中选择品牌名称。
我如何也可以根据品牌名称进行搜索?
模型-POsts关系。帖子模型:
class Post extends Model
{
protected $table = 'posts';
protected $dates = ['status_change'];
public function make_rel()
{
return $this->belongsTo(Make::class, 'make_id' ,'id','make_logo');
}
}
所以基本上我创建了一个帖子。在创建过程中,我可以选择一个品牌。 过帐表格会保存mak id。将Make保存为ID为make_name的另一个表。
发布表:
现在,我想基于make对帖子表进行查询:
$posts = Country::where('country_name', $request->input('country'))->first()->posts()->orderBy('status_change','DESC')
->where('status','Published')
->where(function($query) use ($search){
$query->where('title','LIKE','%'.$search.'%');
$query->orWhere('model','LIKE','%'.$search.'%');
$query->orWhere('notes','LIKE','%'.$search.'%');
$query->orWhere('description','LIKE','%'.$search.'%');
})
->paginate(25);
}
答案 0 :(得分:1)
您可以为此使用whereHas
。在您的->where(function($query) use ($search){
块中:
->orWhereHas('make_rel', function($query) use($search) {
$query->where('make_name','LIKE','%'.$search.'%');
}