Полиморфные отношения в Laravel

479
14 января 2017, 14:51

Создал БД

posts

id - integer
title - string
body - text

videos

id - integer
title - string
url - string

comments

id - integer
body - text
commentable_id - integer
commentable_type - string

Для каждой Модели определил отношения

class Comment extends Model
{
    /**
     * Get all of the owning commentable models.
     */
    public function commentable()
    {
        return $this->morphTo();
    }
}
class Post extends Model
{
    /**
     * Get all of the post's comments.
     */
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }
}
class Video extends Model
{
    /**
     * Get all of the video's comments.
     */
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }
}

В контроллере написано

  public function index()
    {
        $comment = App\Comment::find(1);
        $commentable = $comment->commentable;
        dd( $commentable);
    }

Но мне выдает ошибку

FatalErrorException in Model.php line 827: Class 'post' not found

В базе пробовал менять название commentable_type на Post все равно ошибка.

Что мне сделать чтобы отношения работали?

Answer 1

Ниже того примера в документации, который вы пытаетесь воспроизвести, написано, что Laravel хранит полное название класса (с пространством имён: App\Post)

Чтобы указать свои, сделайте так:

Relation::morphMap([
    'post' => 'App\Post',
    'video' => 'App\Video',
 // 'как-храним' => 'класс',
]);

Сделать это можно в App\Providers\AppServiceProvider::boot(), например.

READ ALSO
NGINX + Php-Fpm - No input file specified

NGINX + Php-Fpm - No input file specified

не могу запустить сайт на локалкеизобрадения видит, а php-файлы не хочет обрабатывать

402
как в phpunit через метод call() отправить заголовки?

как в phpunit через метод call() отправить заголовки?

Передаю через call() файл, как передать заголовки?

325
Разбор протокола

Разбор протокола

Привет! Необходимо написать программу для разбора пакетов данных протокола, которые шлёт терминал ГЛОНАСС

304
PHP | Передача option в select

PHP | Передача option в select

Получаю список "Категорий" из таблицы бд MySqlИ задача заполнить Select полученным списком

456