Laravel外键查询

时间:2019-07-08 18:38:09

标签: laravel laravel-5.8

我具有以下结构。用户注册时,他选择一个国家。他创建了一个帖子。我想搜索具有搜索关键字的特定国家/地区的所有帖子。搜索关键字可以是标题,型号,价格等。很好。

但是,我也希望能够搜索品牌名称。但是与其他字段不同,品牌名称不会直接保存在我的表中,而是会保存一个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 Table

发布表:

Post Table

现在,我想基于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);
        }

1 个答案:

答案 0 :(得分:1)

您可以为此使用whereHas。在您的->where(function($query) use ($search){块中:

->orWhereHas('make_rel', function($query) use($search) {
    $query->where('make_name','LIKE','%'.$search.'%');
}
相关问题