Laravel渴望加载,多个相同具有一个关系

时间:2019-03-12 11:50:50

标签: php laravel-5 eloquent

我有2个简单的模型。首先,一个叫做Builds,第二个叫做SlotOptions。每个版本都可以分配5个插槽。

class BuildDB extends Model

并且有5个这样的关系slot1-5 and id changes to slot1-5_id

 public function slot1()
    {
        return $this->hasOne('\App\SlotOptions', 'id', 'slot1_id');
    }

在控制器中我这样称呼;

BuildDB::with([ 'slot1', 'slot2', 'slot3', 'slot4', 'slot5'])->find(5);

\App\SlotOptions模型不包含任何额外的编码。

这将生成5个“相同”查询。 -atm急切的加载将在我获得构建列表的情况下起作用,并且每个插槽都具有whereIn子句,是否可以将其变成一个大的wherein子句,或者是否需要更改数据库架构。 / p>

1 个答案:

答案 0 :(得分:2)

在这种情况下,不可能优化紧急加载。

我建议您将数据库架构更改为many-to-many relationship
这种设计更加灵活,可以让您将来轻松添加更多插槽。

使用以下列创建名为build_slot_option的数据透视表:build_idslot_option_id
如果要对插槽进行编号/排序,请添加一列。

然后定义一个BelongsToMany关系:

class BuildDB extends Model
{
    public function slots()
    {
        return $this->belongsToMany(
            SlotOptions::class, 'build_slot_option', 'build_id', 'slot_option_id'
        );
    }
}

BuildDB::with('slots')->find(5);