почему внутреннее соединение SQL возвращает пустой результат в laravel? - PullRequest
0 голосов
/ 29 апреля 2019

Вы можете проверить, почему этот код возвращает мне пустой результат в laravel.я пытаюсь получить название нации на основе идентификатора нации в таблице учителей.

public function edit(Teacher $teacher)
{

  $teachers= DB::table('teachers','nations')
  ->join('nations', 'teachers.nation_id', '=', 'nations.id')
  ->select('teachers.*')
  ->where('teachers.id',$teacher->id)
  ->first();

return view('teachers.create',['teachers' => $teachers]);
}

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Зачем вам нужно использовать построитель запросов для выполнения такого несложного запроса?

Этого проще достичь, если добавить метод отношений в свою модель Teacher.

Итак, в своем классе Teacher добавьте следующее:

public function nation() {
    return $this->belongsTo(Nation::class);
}

Тогда в вашем контроллере вы можете использовать его так:

$teacher->nation;
1 голос
/ 29 апреля 2019

Проверьте этот код

public function edit(Teacher $teacher)
{
  $teachers= DB::table('teachers')
    ->join('nations', 'teachers.nation_id', '=', 'nations.id')
    ->select('teachers.*','nations.name')
    ->where('teachers.id','=',$teacher->id)
    ->first();

  return view('teachers.create',['teachers' => $teachers]);
}
0 голосов
/ 29 апреля 2019

В случае, если вы допустили в таблице учителей пустое значение или значение NULL, то вам нужно использовать левое соединение, чтобы сохранить все записи из таблицы учителей:

public function edit(Teacher $teacher)
{

  $teachers= DB::table('teachers','nations')
  ->leftJoin('nations', 'teachers.nation_id', '=', 'nations.id')
  ->select('teachers.*', 'nations.name')
  ->where('teachers.id',$teacher->id)
  ->first();
  return view('teachers.create',['teachers' => $teachers]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...