Допустим, у меня есть три таблицы в БД (и три модели).
- Пункт назначения (идентификатор, заголовок, region_id)
- Регион (идентификатор, заголовок)
- Переводы (идентификатор, region_id; nullable, destination_id; nullable, translation_value)
Тогда у меня определены следующие отношения и области действия:
Направление
public function getRegion(){
return $this->belongsTo('App\Models\Region', 'region_id')->translate();}
public function scopeTranslate($query){
return $query->join('translations', function($join){
$join->on('destinations.id', '=', 'translations.destination_id')
->where('language_code', app()->getLocale());
})->select('destinations.*', 'translations.value as translated_title');}
Регион
public function scopeTranslate($query){
return $query->join('lm_translations', function($join){
$join->on('regions.id', '=', 'lm_translations.region_id')
->where('language_code', app()->getLocale());
})->select('regions.*', 'lm_translations.value as translated_title');}
Затем я получаю места назначения и загружаю переводы на обоих.
$destinations = Destination::whereHas('getRegion')
->with('getRegion')->translate()->get();
Проблема: Регион получает перевод от места назначения при активной загрузке, но еслиЯ загружаю его, как обычно, все в порядке.
Я выполнял запросы непосредственно в БД, и они выполняются, как и должно быть, это означает, что нетерпеливая загрузка неправильно соединяет отношения.
Где подвох?