列显示“ id”号而不是外键属性

时间:2019-05-30 01:54:42

标签: laravel backpack-for-laravel

在Laravel Backpack中使用select2字段/列类型时,列表视图将显示外来实体的“ id”,而不是所需的外键(在本例中为会话的“名称”)。

Laravel 5.8.4,背包3.4。我在GitHub上问,回答是我的关系在我的模型中不正确。我不认为这是问题所在,因为名称已加载到编辑视图中。

GradeCrudController

        $this->crud->addColumn([
            'label' => "Session",
            'type' => 'select2',
            'name' => 'session_id', // the db column for the foreign key
            'entity' => 'session', // the method that defines the relationship in your Model
            'attribute' => 'name', // foreign key attribute that is shown to user
            'model' => "App\Models\Session" // foreign key model
        ]);

成绩(型号)

    public function session()
    {
      return $this->belongsTo('App\Models\Session');
    }

会话(模型)

    public function grades()
    {
      return $this->hasMany('App\Models\Grade');
    }

enter image description here

2 个答案:

答案 0 :(得分:0)

由于已经过了几天,没有人回应,我以为我会发布我想出的答案。请注意,我非常怀疑这是否是正确的解决方案,但是对于我的项目而言,它会做到。

我为成绩模型添加了Laravel Observer。用户添加新记录后,观察者将访问会话表,使用键拉出会话名称,并将其作为列添加到“成绩”表中。

然后在背包中,我只显示“名称”列。

必须有一个比这更好的方法。。。但是现在就可以了。

答案 1 :(得分:0)

我看到您使用的是“ select2”列类型。这不是背包默认提供的东西-它只有一个“选择”列。

最有可能发生的事情是Backpack加载了“ text”列,因为它找不到“ select2”列。因此,ID。

尝试将“ select2”更改为“ select”。它应该对您有用,而无需任何观察员/其他任何东西。