Laravel 搜索属于

Posted

技术标签:

【中文标题】Laravel 搜索属于【英文标题】:Laravel Search BelongsTo 【发布时间】:2020-11-08 12:31:18 【问题描述】:

我正在制作一个搜索功能,并且我正在使用 orWhere,但是,我遇到了一个问题,我想通过文本搜索 brand_id。在我的模态中,我将其设置为 belongsTo 但有什么方法可以让我在 mysql 搜索词中使用它?

我的搜索查询

$products = Product::where('name', 'LIKE', '%' . $searchTerm . '%')
->orWhere('title', 'LIKE', '%' . $searchTerm . '%')
->orWhere('description', 'LIKE', '%' . $searchTerm . '%')
->orWhere('allergies', 'LIKE', '%' . $searchTerm . '%')
->orWhere('price', 'LIKE', '%' . $searchTerm . '%')->paginate(15);

我想以某种方式包含品牌名称,而不是数据库中的brand_id。有没有办法做到这一点?我在我的产品模型中像这样链接了它

public function brand()

    return $this->belongsTo(Brand::class);

【问题讨论】:

Welcome to SO ...您可以使用查询关系(特别是关系存在)的方法通过具有特定值的关系的存在来过滤结果集 【参考方案1】:

你可以使用 orWhereHas:

$products = Product::where('name', 'LIKE', '%' . $searchTerm . '%')
                ->orWhere('title', 'LIKE', '%' . $searchTerm . '%')
                ->orWhere('description', 'LIKE', '%' . $searchTerm . '%')
                ->orWhere('allergies', 'LIKE', '%' . $searchTerm . '%')
                ->orWhere('price', 'LIKE', '%' . $searchTerm . '%')
                ->orWhereHas('brand', function($q) use ($searchTerm)
                    $q->where('name', 'LIKE', "%$searchTerm%");
                )
                ->paginate(15);

https://laravel.com/docs/master/eloquent-relationships#querying-relationship-existence

【讨论】:

谢谢!这正是我要找的!

以上是关于Laravel 搜索属于的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在相关表中多次搜索

带有内部连接的 Laravel 范围

在 laravel 中插入关系

Laravel 关系:一个foreignKey 对应多个localKey 关系

Laravel 属于多返空

Laravel:种子表有几个属于使用工厂的关系