Laravel:根据值在范围内的位置定义关系


Laravel: defining relationship based on where value falls in a range?

我正在开发一个应用程序,其中 Item 具有称为波长的值。在另一个表中,由模型 Color 表示,有许多条目以 {id | color | start_wavelength | end_wavelength} 的形式出现。我正在尝试弄清楚如何在项目模型中定义一种关系,该关系可以根据颜色在范围内的位置获取颜色。

本质上,我需要的是获得start_wavelength大于或等于项目波长值以及end_wavelength值小于项目波长值的颜色。

这是我目前正在尝试做的事情,但它显然有效,因为该关系不是由主键和外键定义的。

public function color()
{
    return $this->belongsTo('App'Color')->where('wavelength', '<=', 'end')->where('wavelength', '>=', 'start');
}

有没有更好的方法可以做到这一点,甚至可能吗?

如果在 Item 和 Color 之间没有定义关系,则无法使用 belongsTo 方法。相反,只需查询与您的条件匹配的第一个颜色并返回该颜色

return Color::where('wavelength', '<=', 'end')->where('wavelength', '>=', 'start')->firstOrFail();

或者更好的是:

return Color::whereBetween('wavelength', ['start', 'end'])->firstOrFail();