@codercat

Как организовывается дублирование данных отношений?

Есть объект локации с большим количеством отношений (регион, район, посёлок, номер дома и так далее)
class PropertyLocation extends Model
{
    public function district()
    {
        return $this->hasOne(LocationDistrict::class);
    }

    public function region()
    {
        return $this->hasOne(LocationRegion::class);
    }

    public function route()
    {
        return $this->hasOne(LocationRoute::class);
    }

    public function settlement()
    {
        return $this->hasOne(LocationSettlement::class);
    }
    ....
}


Так как сам объект локации подгружается ленивой загрузкой и запросов хватает помимо этого, хотелось бы дублировать данные отношений в сам объект локации. То есть, на выходе должен быть объект локации, в котором продублированы например, name и id из относящихся таблиц: region_id, region_name etc..

Про такой кейс рассказывается тут в рухайлоаде в первой главе, но хотелось бы узнать про реализацию такого в рамках ларавел, гугление не помогло :(
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
Vadiok
@Vadiok
Веб разработчик
Как я понимаю, особенного ничего нет, как вы и написали, храните поля кроме region_id, также region_name и т.п. Чтобы все корректно обновлялось можно повесить триггер на сохранение локации и проверять, если $location->isDirty(['region_id']), то обновлять region_name перед выполнением сохранения в базу.

На обновление региона и подобных можно также повесить триггер в Laravel, а можно непосредственно на базу, и по этому триггеру обновлять названия у всех завязанных на него локаций.

PS. Насколько я понял, у вас должно быть belongsTo вместо hasOne.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы