Laravel - используйте объединение, чтобы выбрать все из одной таблицы и значение из другой - PullRequest
0 голосов
/ 03 мая 2020

У меня есть две таблицы «электронные письма» и «пользователи», и я хочу иметь возможность использовать один запрос, чтобы получить всю информацию об электронном письме и информацию о том, какой пользователь назначен этому электронному письму (с возможностью, что никто не назначен) на это письмо).

так что я сделал:

$userInfo = Emails::leftjoin('Users', 'Emails.email', '=', 'Users.email')
  ->select('Emails.*', 'Users.username')
  ->where([
    ['Emails.owner_id', '=', Auth::id()],
  ])
  ->get();

, насколько я вижу, это почти работает, НО выше решение также выбирает удаленных пользователей (пользователей со значением в delete_at), поэтому самым простым решением было добавить

['Users.deleted_at', '=', null],

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

Как я можете выбрать все из таблицы электронной почты и получить имя пользователя из таблицы пользователей, только если 'Emails.email', '=', 'Users.email'.

1 Ответ

0 голосов
/ 03 мая 2020

В вашей модели электронной почты добавьте это отношение пользователя с именем вашей модели пользователя

public function users(){
    return $this->hasMany(Users::class, 'email', 'email')->whereNull('deleted_at');
}

В вашем контроллере вы можете получить таких не удаленных пользователей, как этот

$userInfo=Emails::with('users')->where('owner_id', Auth::id())->get();

Вы можете получить имя пользователя так со всеми данными электронной почты.

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