#php #laravel #laravel-5 #eloquent
#php #laravel #laravel-5 #красноречивый
Вопрос:
(Речь идет о Laravel 5.8)
Я знаю, что вы можете создавать пользовательские функции в своей модели, но я не могу понять, как создать пользовательскую функцию, которая использует данные из функции morphMany.
Что работает:
model.php:
public function images()
{
return $this->morphMany('AppImage', 'owner');
}
page.blade.php:
@foreach($model->images() as $image)
{{ $image->url }}
@endforeach
Это работает. Но я хочу создать функцию, которая, например, возвращает только плакат. Но когда я помещаю этот foreach в функцию внутри моей модели. Это не будет перебирать изображения. Смотрите следующий код:
Что не работает:
model.php:
public function images()
{
return $this->morphMany('AppImage', 'owner');
}
public function poster()
{
$images = $this->morphMany('AppImage', 'owner');
foreach($images as $image)
{
/* THIS CODE WILL NEVER RUN SOMEHOW */
if ($image->type == "poster")
{
return $image;
}
}
return NULL;
}
Код просто возвращает NULL, чего мне не хватает?
Комментарии:
1. Вы забыли открыть
{
после foreach2. @dparoli ой, ой.. Я отредактирую пример кода. Это была не та ошибка, которую я получал 😉 но хорошая работа по ее поиску 🙂
Ответ №1:
Вы хотели бы использовать средство доступа, $model->images
которое возвращает коллекцию, вместо конструктора запросов, $model->images()
который возвращает конструктор запросов, т.е:
//page.blade.php
@foreach($model->images as $image)
{{ $image->url }}
@endforeach
// in Model
public function poster()
{
foreach($this->images as $image)
{
if ($image->type == "poster")
{
return $image;
}
}
return NULL;
}
Комментарии:
1. Пожалуйста, не редактируйте мой ответ, это то, на что я действительно хочу ответить, попробуйте код и посмотрите, что у вас получится