无法在Elequent Polymorphic Relationship中获取数据

时间:2016-09-17 11:25:29

标签: php mysql laravel-5 laravel-5.3

我正在使用polymorphic relations构建评论系统,似乎所有内容都没有任何问题。 enter image description here

这是我的帖子模型

<?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] => human@mail.com
            [created_at] => 2016-09-15 17:18:00
            [updated_at] => 2016-09-15 17:20:05
        )

)

为什么评论实体在这里丢失了?谢谢:))

1 个答案:

答案 0 :(得分:2)

请尝试Eager loading,如下所示:

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

在数据库的commentable_type列中使用 App \ Posts 代替帖子。这是因为:(引自laravel documentation

  

commentable_type列是ORM如何确定&#34;类型&#34;在访问可评论关系时拥有模型返回。

另请遵循naming convention for models