У меня есть две таблицы с именем «works» и «slides», а также два класса, которые расширяют Eloquent с именем «Work» и «Slide». В моей таблице «works» у меня есть столбец «id», столбец «title», столбец «description» и столбец «image» и внутри моей таблицы «слайды». У меня есть составной ключ с использованием внешнего ключа с двумя столбцы с именем 'id' и 'work_id'.Laravel Eloquent hasOne возвращает пусто
Это как мои отношения базы данных выглядит:
Это код для моего класса 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);
Однако, если заменить вызов '$ слайд-> workId()' с:
Work::find($slide->work_id)
затем находит строку без проблем.
Что мне нужно сделать, чтобы вернуть функцию Work, вместо вызова Work :: find()?
Понимаю. Извините, я не слишком хорош с отношениями с базой данных, но теперь понимаю. Спасибо за объяснение. –
@LiamPotter, кроме того, я бы предложил использовать загрузку для этого цикла. Вы можете найти подробную информацию об этом в URL-адресе, с которым я связан. – TonyArra
Нравится так? http://pastebin.com/D8stebG1 –