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

时间:2016-03-13 23:47:30

标签: php sql laravel laravel-5 range

我正在开发一个应用程序,其中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');
}

有更好的方法可以做到这一点,还是有可能?

1 个答案:

答案 0 :(得分:1)

如果Item和Color之间没有已定义的关系,则无法使用belongsTo方法。相反,只需查询符合条件的第一个Color并返回

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

或者更好:

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