【问题标题】:Laravel query using whereHasLaravel 使用 whereHas 查询
【发布时间】:2023-03-07 00:20:01
【问题描述】:

我有 2 个模型:车漆颜色和汽车

public function color()
{
    return $this->hasOne(Colors::class)->latest();
}

我需要搜索最新的喷漆汽车颜色,但使用 whereHas,它会搜索所有颜色

$colors = ['black', 'white'];
$cars->whereHas('color', function($cars) use ($colors) {
          return $cars->whereIn('paint_color', $colors);
});

如何让 whereIn 只查询最新的行?

【问题讨论】:

  • 你在哪里使用了 $cars 变量中的 get() 方法?
  • 我在数据库有很多车和很多颜色,我使用分页$cars->paginate(10)->appends(....);

标签: php laravel


【解决方案1】:

首先,因为每辆汽车都可以涂上多种颜色,但您想检索最新的涂装颜色。这意味着您从汽车到颜色具有一对多的关系。因此关系颜色应更改为

public function colors()
{
    return $this->hasMany(Colors::class)
        ->latest();
}

然后只检索最新的颜色,您可以调用->limit(1),因为颜色已经按关系排序。

$cars = $query->with(['colors', function($query) {
        return $query->limit(1);
    }])
    ->get();

然后你可以过滤最新的颜色是否在你的$colors数组中

$filteredCars = $cars->filter(function($car) {
    return $car->colors->whereIn('paint_color', $colors);
});

【讨论】:

  • 我在数据库中有很多汽车和很多颜色,我使用分页 $cars->paginate(10)->appends(....); 我如何删除不必要的行?
  • 那么我不知道,如果你想使用 paginate() 你应该使用一个查询,但我的解决方案必须检索汽车和颜色然后过滤它。
  • 也许你能帮我解决任何问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多