【问题标题】:Laravel query on foreign keyLaravel 查询外键
【发布时间】:2019-07-09 02:45:37
【问题描述】:

我有以下结构。当用户注册时,他选择了一个国家。他创建了一个帖子。我想搜索具有搜索关键字的特定国家的所有帖子。搜索关键字可以是标题、型号、价格等任何内容。它工作正常。

但是,我也希望能够搜索制作名称。但与其他字段不同,make name 不会直接保存在我的表中,它会保存一个 ID,以便从不同的表中选择 make name。

如何也可以根据品牌名称进行搜索?

模型 - 帖子关系。帖子模型:

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');
    }

}

所以基本上我创建了一个帖子。在创作过程中,我可以选择一个品牌。 Post 表保存 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);
        }

【问题讨论】:

  • make 表的名称是什么?

标签: laravel laravel-5.8


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多