【问题标题】:Building polymorphic relations in laravel 5.2在 laravel 5.2 中建立多态关系
【发布时间】:2016-09-10 15:38:54
【问题描述】:

回答有cmets,cmets有投票。
回答得票。

votes table:
id  user_id  vote  votable_id  votable_type
1     1       5     1          Comment
2     1       6     1          Post
...

后模型:

 public function comments()
    {
        return $this->hasMany('App\Comment','post_id','id'); 
    }

   public function votes()
    {
        return $this->morphMany('App\Vote', 'votable');
    }

评论模型:

public function votes()
{
    return $this->morphMany('App\Vote', 'votable');
}

public function post()
{
    return $this->belongsTo('App\Post','post_id','id'); 
}

投票模式:

 public function votable()
    {
        return $this->morphTo();
    }

我获得了所有帖子和他们的 cmets,但没有获得帖子和 cmets 的投票。

$posts=Post::all();
foreach($posts as $post)
{
     echo "<pre>"; print_r($post->post);    
     foreach($post->comments as $comment)
     {
        echo "<pre>"; print_r($comment->comment_body);
        foreach($comment->votes as $vote)
        {
            echo "<pre>"; print_r($vote->vote);
        }               
     }

    foreach($post->votes as $vote)
    {
        echo "<pre>"; print_r($vote->vote);
    }
}

print_r($post-&gt;votes);print_r($comment-&gt;votes); 与投票没有任何关系。

【问题讨论】:

  • dd($post-&gt;votes)dd($comment-&gt;votes) 给你什么?另外,能否发一张投票表的截图?
  • @prateekkathal 我没有任何投票关系。
  • 你使用的是 Laravel 5.2 吗?
  • 由于您刚刚编辑了您的帖子并确认您使用的是 Laravel 5.2,我认为 votable_type 应该是 App\CommentApp\Post 而不仅仅是 CommentPost。请通过更改某些可投票字段中的行来确认,如果您得到预期的输出,请告诉我。 :)
  • @prateekkathal 条目是正确的。类型列需要模型类名。 laravel.com/docs/5.3/…

标签: laravel laravel-5.2


【解决方案1】:

请在votable 中使用 App\CommentApp\Post 而不是 CommentPost柱子。

Laravel 4.2 过去只保留模型的名称,但 Laravel 5.2 现在将它们存储在命名空间中。

如果有任何疑问,请告诉我:)

-- 编辑

正如 @jaysingkar 在 cmets 中所问的那样,我正在为这个问题添加用于执行 morphMap 的代码。

通过以下命令创建您自己的服务提供者

php artisan make:provider RelationServiceProvider

然后,创建把这个放在命名空间之后

use Illuminate\Database\Eloquent\Relations\Relation;

然后将其添加到boot() 方法中

Relation::morphMap([
  'Posts' => App\Post::class,
  'Comments' => App\Comment::class,
]);

希望对您有所帮助! :)

【讨论】:

  • 如果可能的话。您能否也添加 Morph Map 实现?或者,如果可以,我会编辑您的答案
  • @jaysingkar 完成!
猜你喜欢
  • 2017-01-18
  • 2019-01-21
  • 2023-04-06
  • 2022-01-24
  • 2019-03-05
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多