RouteServiceProvider中的Laravel显式路由模型绑定问题

时间:2018-07-04 13:13:22

标签: php mysql laravel join routing

我在Laravel( 5.6 版本)应用程序中为 Slider模块使用了显式路由模型绑定。现在,当我尝试将滑块表与file_uploads表联接时,我面临一个问题。

RouteServiceProvider

$this->bind('slider', function ($value) {
    $slider = new Slider;

    return Slider::withTrashed()
                  ->leftjoin('file_uploads','file_uploads.file_code', '=', 'sliders.file_code')
                  ->where('sliders.id', $value)->first();
});

这是代码正在使用。 滑块 file_uploads 表均具有 ID 列。并且在滑块编辑页面中,正在从file_uploads表中获取ID。我的预期ID来自sliders表。

非常感谢您能提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用过Eloquent Relationship,则可能会因表id而使您拥有表中的一个joins属性覆盖另一个属性。

但是为了使用Joins,您可以使用select()(请参阅Selects)或将数组参数传递给first()来检索所需的id作为另一个属性。方法,因此您的代码变为:

return Slider::withTrashed()
              ->leftjoin('file_uploads','file_uploads.file_code', '=', 'sliders.file_code')
              ->where('sliders.id', $value)
              ->first(['*', 'sliders.id as sliders_id']);

或者:

return Slider::withTrashed()
              ->leftjoin('file_uploads','file_uploads.file_code', '=', 'sliders.file_code')
              ->where('sliders.id', $value)
              ->select('*', 'sliders.id as sliders_id')
              ->first();

以任何一种方式将select语句作为查询传递,并将id的值作为sliders_id返回,您可以在需要id的地方使用它。