选择标有某些标签的模型
我没有问题 $lis = Capacitytype::find(124)->entities()->orderBy('name','asc')->get();
在我的Capacitytype
模型中,我有这种关系:
public function entities()
{
return $this->belongsToMany('App\Models\Entity', 'entity_capacitytypes', 'capacitytype_id', 'entity_id');
}
我的问题: 我希望使用相同的选择f模型来填充表单中的选择字段。 (我使用select2.js)
当我尝试实现此代码时
$lis = array(null => 'Commitee') + Capacitytype::find(124)->entities()->orderBy('name','asc')->lists('name', 'id')->all();
我收到此错误:
SQLSTATE [23000]:完整性约束违规:1052字段列表中的列'id'不明确(SQL:从name
内连接id
中选择entities
,entity_capacitytypes
在entities
。id
= entity_capacitytypes
。entity_id
其中entities
。deleted_at
为空且entity_capacitytypes
。capacitytype_id
= {6} name
asc)
我试图通过在我的代码中添加表名来解决这个问题,但这是我能够去的:
->lists('entities.name', 'entities.id')
我的问题: 如何修改代码以获取我的选择字段所需的集合?
谢谢。
答案 0 :(得分:1)
您可以利用Laravel的with()
执行急切加载,以解决此问题。为此,只需将关系名称(即entities
)传递给方法:
Capacitytype::find(124)->with('entities')->orderBy('name','asc')->lists('entities.name', 'entities.id');
否则,您可以先获取记录,然后重新格式化以匹配您的用例:
$list = Capacitytype::find(124)->entities()->orderBy('name','asc')->get()->toArray();
因此,您可以优化返回的数组列表,以匹配您的 id => name 格式(因此,替代lists
方法)。
$refinedList = array();
foreach($list as $entity){
$refinedList[$entity['id']] = $entity['name'];
}
而且,你去了。