Laravel Eloquent hasOne возвращается пустым

У меня есть две таблицы с именами ‘works’ и ‘slides’, а также два класса, которые расширяют Eloquent с именами ‘Work’ и ‘Slide’.
Внутри моей таблицы «работ» у меня есть столбец «id», столбец «title», столбец «description» и столбец «image», а внутри моей таблицы «slides» у меня есть составной ключ, использующий внешний ключ с двумя столбцами названный ‘id’ и ‘work_id’.

Вот как выглядит моя связь с базой данных:
Связь с базой данных

Вот код для моего класса Slide:

class Slide extends Eloquent {

public $timestamps = false;

public function workId() {
return $this->hasOne('work', 'work_id', 'id');
}

}

И это код для моего класса работы:

class Work extends Eloquent {

public $timestamps = false;

}

Внутри моей индексной страницы я пытаюсь получить объект Work, вызывая метод ‘workId ()’ внутри моего объекта Slide, однако он возвращается пустым с этим кодом:

$slides = Slide::all();
$works = new \Illuminate\Database\Eloquent\Collection;
foreach ($slides as $slide) {
$works->push($slide->workId());
}
printf($works);

Однако, если я заменю вызов $ slide-> workId () на:

Work::find($slide->work_id)

затем он находит строку без проблем.

Что я должен сделать, чтобы функция возвращала объект Work вместо вызова Work :: find ()?

3

Решение

Слайд принадлежит Work, поскольку внешний ключ для works находится внутри таблицы слайдов. Вы также используете неправильное наименование для функции отношений и неверный синтаксис для hasOne.

Вам необходимо использовать:

class Slide extends Eloquent {

public $timestamps = false;

public function work() {
return $this->belongsTo('Work');
//or return $this->belongsTo('Work', 'work_id', 'id');
}

}

Чтобы получить работу, которая принадлежит слайду: $slide->work

Примечание: вы используетеобъединение ()«для принадлежит», а не «push ()»

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]