使用具有特定标记的模型填充选择字段 - laravel

时间:2015-08-30 08:39:27

标签: mysql forms laravel collections laravel-5.1

选择标有某些标签的模型

我没有问题
        $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中选择entitiesentity_capacitytypesentitiesid = entity_capacitytypesentity_id其中entitiesdeleted_at为空且entity_capacitytypescapacitytype_id = {6} name asc)

我试图通过在我的代码中添加表名来解决这个问题,但这是我能够去的: ->lists('entities.name', 'entities.id')

我的问题: 如何修改代码以获取我的选择字段所需的集合?

谢谢。

1 个答案:

答案 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'];
}

而且,你去了。