Laravel Запрос, связанный с Eloquent Model, не работает должным образом - PullRequest
0 голосов
/ 23 марта 2020

У меня есть две таблицы. codes и translations.

таблица кодов

id | name
---|------
1  | A99

таблица переводов

id | code_id | language_code | copy
---|---------|---------------|------
1  |1        |en             | Heart Disease
2  |1        |fr             | Sning Nat

модель кода

class Code
{
  function translation() // for default lanuage
  {
   return $this->hasOne(Translation::class, 'code_id')->where('language_code', 'en);
  }
}

Запрос

$codes = Codes::with(['translation' => function($query){
 $query->where('copy', 'like', '%hltad la loq%');
}]);

Это ничего не должно возвращать, но возвращает все коды без перевода.

Другими словами, я просто хочу этот запрос за сценой.

select codes.*, translations.copy from codes
inner join translations ON codes.id = translations.code_id
where translations.language_code='en'
and translations.copy like '%hltad la loq%'

1 Ответ

0 голосов
/ 23 марта 2020

Вы используете с, так что он возвращает первую таблицу, это как левое соединение. Если вы хотите получить внутреннее соединение, вы должны сделать так:

$codes = Codes::whereHas('translation', function ($join) {
    return $join->where('copy', 'like', '%hltad la loq%');
})->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...