Не удалось получить данные в Elequent Polymorphic Relationship

Я создавал систему комментариев, используя полиморфные отношения, похоже, все работает без нареканий. введите здесь описание изображения

Вот моя модель сообщений

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Posts extends Model
{
    public $primaryKey = 'pid';
    public $timestamps = false;

    public function author()
    {
        return $this->belongsTo('App\User', 'p_author_id');
    }

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

}

Вот моя модель комментария

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

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

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function posts()
    {
        return $this->belongsTo('App\Posts', 'pid');
    }

}

Теперь проблема в том,

$pin = Posts::find($pin_id);

не возвращает никаких комментариев, связанных с сообщением! Обратите внимание, что у него есть сущность автора, но нет комментариев.

print_r($pin->toArray());

вернет только следующий массив,

Array
(
    [pid] => 17
    [p_title] => Hello World?
    [p_content] => How are you earth?
    [p_author_id] => 4
    [p_created_at] => 2016-09-15 17:18:16
    [p_updated_at] => 2016-09-15 17:18:16
    [comments_count] => 0
    [votes] => 0
    [author] => Array
        (
            [id] => 4
            [name] => Human
            [email] => [email protected]
            [created_at] => 2016-09-15 17:18:00
            [updated_at] => 2016-09-15 17:20:05
        )

)

почему здесь отсутствует объект comments? Спасибо :)


person rakibtg    schedule 17.09.2016    source источник


Ответы (1)


Попробуйте выполнить нетерпеливую загрузку, как показано ниже:

$pin = Posts::with('comments')->find($pin_id);

И используйте App\Posts вместо Posts в столбце commentable_type в базе данных. Это потому, что: (Цитата из документации laravel)

Столбец commentable_type показывает, как ORM определяет, какой «тип» модели-владельца следует вернуть при доступе к комментируемому отношению.

Также соблюдайте соглашение об именах моделей.

person sha-1    schedule 17.09.2016
comment
Спасибо за ваш ответ! Он по-прежнему возвращает ноль. print_r($pin->replies->toArray()) outputs empty array - person rakibtg; 17.09.2016
comment
попробуйте dd($pin) и проверьте, отображается ли атрибут «комментарии»? - person sha-1; 17.09.2016
comment
Я сделал все снова с нуля и переименовал сущность комментариев в ответы в моем проекте, хотя все осталось по-прежнему. с dd($pin) это показывает, что атрибут ответов, также известный как комментарии, пуст http://i.imgur.com/K8iMJkT.png - person rakibtg; 17.09.2016
comment
Используйте App\Posts вместо Posts в значении столбца commentable_type, а затем проверьте еще раз. - person sha-1; 17.09.2016
comment
Я обновил ответ, если он кому-то понадобится позже. И спасибо за голосование и принятие. :) - person sha-1; 17.09.2016