我正在开发一个应用程序,其中Item具有一个名为wavelength的值。在另一个表中,由模型Color表示,有许多条目,形式为{id |颜色| start_wavelength | end_wavelength}。我试图找出如何在项目模型中定义一个关系,该关系可以根据颜色在范围内的位置来获取颜色。
基本上我需要的是获得start_wavelength大于或等于项目波长值的颜色,其中end_wavelength值小于项目波长的值。 / p>
这是我目前正在尝试做的事情,但它显然起作用,因为这种关系不是由主键和外键定义的。
public function color()
{
return $this->belongsTo('App\Color')->where('wavelength', '<=', 'end')->where('wavelength', '>=', 'start');
}
有更好的方法可以做到这一点,还是有可能?
答案 0 :(得分:1)
如果Item和Color之间没有已定义的关系,则无法使用belongsTo方法。相反,只需查询符合条件的第一个Color并返回
return Color::where('wavelength', '<=', 'end')->where('wavelength', '>=', 'start')->firstOrFail();
或者更好:
return Color::whereBetween('wavelength', ['start', 'end'])->firstOrFail();