#php #laravel #eloquent #controller
#php #laravel #красноречивый #контроллер
Вопрос:
Мне нужно получить идентификатор лекции в моей таблице student, и только после этого я могу получать данные лекции, используя этот идентификатор. Проблема в том, что $lectureID равен нулю, когда я пытаюсь применить его к лекционной модели, но когда я проверяю консоль, она получает данные. Заранее спасибо.
Контроллер
public function getLecture($id)
{
$lectureID = student::select('lecture_id_FK')->where('student_id',$id)->first();
$lectureDATA = lecture::where('lecture_id',$lectureID)->first();
return $lectureDATA;
}
Комментарии:
1. Вызов
first
метода в построителе запросов не возвращает выбранное значение, он возвращает экземпляр этой модели Eloquent с указанными выбранными полями. Это означает, что значение, передаваемоеwhere
условию, должно быть$lectureID->lecture_id_FK
(хотя кажется, что это должно быть выбраноlecture_id
неlecture_id_FK
, но это зависит от настройки имен столбцов).2. @Bogdan спасибо. это устраняет проблему ~
3. Это не Laravelish. Вам нужно определить взаимосвязи в ваших моделях.
4. Смотрите отношения моделей
Ответ №1:
you can try two ways
public function getLecture($id)
{
## way 1
$lectureID = student::where('student_id',$id)->value('lecture_id_FK');
$lectureDATA = lecture::where('lecture_id',$lectureID)->first();
## way 2
$lectureID = student::where('student_id',$id)->first();
$lectureDATA = lecture::where('lecture_id',$lectureID->lecture_id_FK)->first();
return $lectureDATA;
}
Ответ №2:
прежде чем проверить, что внутри $lectureID:
public function getLecture($id)
{
$lectureID = student::select('lecture_id_FK')->where('student_id',$id)->first();
dd($lectureID);//I believe inside will be object with lecture_id_FK
//then just
$lectureDATA = lecture::where('lecture_id',$lectureID->lecture_id_FK)->first();
return $lectureDATA;
}
Рекомендуемый способ сделать это:
В классе Student model (рекомендую использовать заглавные буквы)
class student
{
public function lecture(){
return $this->hasOne('Applecture','lecture_id_FK','lecture_id');
}
}
затем просто загрузите studen с лекцией, подобной этой
$student = studend::with('lecture')->find($id);
$lecture = $student->lecture;