Laravel Eloquent - выберите с объединением, где текст столбца, как текст столбца из другой таблицы - PullRequest
0 голосов
/ 30 января 2019

Я хочу выбрать пользователей из моей таблицы users и вернуть логическое значение, если они живут в городе, который существует в моей таблице cities в моей базе данных.

Проблема в том, что я могуне использовать идентификатор города в таблице пользователей, потому что я получаю список пользователей из внешнего источника.

В обычном запросе SQL я присоединяюсь к таблице городов (users.city LIKE cities.name), а затем добавляюв столбце с результатом true false.

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2019
User::join('City','user.city','=','city.name')
->select(user.city,DB::raw('(CASE WHEN user.city <> NULL THEN 1 ELSE 0 END) AS is_user')
  )
0 голосов
/ 30 января 2019

В вашей пользовательской модели вы можете добавить новое свойство доступа

protected $appends = ['lives_in_city'];

public function getLivesInCityAttribute(){
    $hasCity = City::where('city', 'like', $this->city)->first();
    return $hasCity? true: false;
}

Теперь ваш пользовательский объект будет иметь новое поле lives_in_city, которое будет возвращать логическое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...