Laravel 5.5关系在检索子关系时无法正常工作

时间:2018-08-03 13:29:11

标签: php laravel eloquent laravel-5.5 relationships

我有一个 Laravel 5.5 应用程序,该应用程序具有编辑或更新功能,该功能具有两个下拉菜单。一个下拉列表是父级关系,第二个下拉列表是子级关系。因此基本上,第一个下拉菜单中有很多第二个下拉列表。

现在介绍我的控制器

中的代码
$services = Service::all()->sortBy('code', SORT_NATURAL | SORT_FLAG_CASE)->pluck('description', 'id');
$categories = Service::with('categories')->get()->sortBy('categories.name', SORT_NATURAL | SORT_FLAG_CASE)->pluck('categories.name', 'categories.id');

我使用了pluck方法,该方法仅检索类别的名称和ID,就像我所说的那样,它是 service 的子关系。 。一项服务具有许多类别,我只想根据所选下拉中显示类别 >服务,然后根据 Laravel pluck 在现有记录的基础上自动选择。

但是第二个dropdowncategories为空或第二个查询不起作用。

这是我在 service 模型中定义我的关系的方式。

public function categories()
{
   return $this->hasMany('App\Models\Categories', 'service_id', 'id');
}

现在将代码保存在我的 blade文件

<div class="form-group col-sm-6">
    {!! Form::label('service_id', 'Service:') !!}
    {!! Form::select('service_id', $services, null, ['class' => 'form-control input-md','required', 'id' => 'service_id'])!!}
</div>

<div class="form-group col-sm-6">
    {!! Form::label('categories_id', 'Category:') !!}
    {!! Form::select('categories_id', $categories, null, ['class' => 'form-control input-md','required', 'id' => 'category_id'])!!}
</div>

感谢有人可以帮助您。 预先感谢。

1 个答案:

答案 0 :(得分:0)

我将看看您要传递给pluck的值。由于您使用第二个查询生成了一个新集合,因此我相信您应该能够调用pluck('name', 'id');categoriescolumn_name用于避免查询中的歧义,但是集合所做的所有事情都是在检索模型,因此,如果您使用不带表前缀的属性名称,则应该得到之后。

我以前假设您正在通过查询来处理排序;由于您也在集合级进行处理,因此我也将从该字段中删除categories前缀。您还可以调整查询以使用->orderBy()方法,并将字段名称作为要获取的数组传递(例如:->get(['name', 'id']))。这完全取决于您的需求-如果我的第一个建议对您不起作用,则可以将排序和过滤移到查询中。希望对您有所帮助。