首页 > 解决方案 > Laravel 5.5 关系采摘在检索子关系时不起作用

问题描述

我有一个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,即服务的子关系,就像我所说的那样。一个服务有很多类别,我只想根据下拉列表中选择的服务在下拉列表中显示类别,该下拉列表是在Laravel pluck的帮助下根据现有记录自动选择的。

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

以下是我在服务模型中定义我的关系的方式。

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

现在我的刀片文件中的代码

<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>

感谢有人可以提供帮助。提前致谢。

标签: phplaraveleloquentlaravel-5.5relationships

解决方案


我会看看你传递给的值pluck。由于您正在使用第二个查询生成一个新集合,我相信您应该能够调用pluck('name', 'id');. categories。_ column_name用于避免查询中的歧义,但集合所做的只是检索模型,因此如果您使用不带表前缀的属性名称 - 您应该得到您所追求的。

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


推荐阅读