Laravel Eager Загрузка, несколько одинаковых hasOne отношений - PullRequest
0 голосов
/ 12 марта 2019

У меня 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 предложении, или требуется изменить схему БД.

1 Ответ

2 голосов
/ 13 марта 2019

В этом случае невозможно оптимизировать энергичную загрузку.

Я рекомендую изменить схему базы данных на отношение «многие ко многим» .
Эта конструкция болеегибкий, он позволяет вам легко добавлять больше слотов в будущем.

Создать сводную таблицу с именем build_slot_option со следующими столбцами: build_id, slot_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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...