Laravel-5.4 Полиморфное отношение возвращает пустой массив - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над проектом Laravel-5.4. В моей базе данных три таблицы users, articles и comments.

Снимок экрана articles таблицы:

articles table

Снимок экрана comments таблицы:

comments table

Article модель:

class Article extends Model
{
    public function comments() {
        return $this->morphMany('App\Comment', 'commentable');
    }
}

Comment модель:

class Comment extends Model
{
    public function commentable() {
        return $this->morphTo();
    }
}

ArticleController содержит следующий метод:

public function showComments() {
    return Article::find(1)->comments;
}

Выше showComments() метод возвращает [] (пустой массив). Я хочу вернуть все комментарии к статье, которая имеет id=1. В чем проблема?

1 Ответ

0 голосов
/ 05 ноября 2018

В столбце commentable_type должно храниться имя модели с полным пространством имен, например App\User. Вы вводили эту информацию вручную? Попробуйте изменить его на App\User, App\Article и т. Д. И посмотрите, сработает ли это.

Вы можете создать morphMap в методе загрузки вашего AppServiceProvider, чтобы присвоить этим пространствам имен более описательное имя, как вы сделали здесь.

public function boot()
{
    Relation::morphMap([
        'User' => 'App\User',
        // etc
    ]);
}

Для импорта Relation:

use Illuminate\Database\Eloquent\Relations\Relation;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...