在laravel 5.2中建立多态关系

时间:2016-09-10 05:58:16

标签: laravel laravel-5.2

答案有评论,评论有投票 答案有选票。

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();
    }

我收到了所有帖子及其评论,但未获得帖子和评论的投票。

$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->votes);print_r($comment->votes);与投票没有任何关系。

1 个答案:

答案 0 :(得分:2)

请在{{1}中使用 App \ Comment App \ Post 代替评论发布列。

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

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

- 编辑

正如@jaysingkar在评论中所说的那样,我正在为这个问题添加为morphMap做的代码。

使用以下命令

创建您自己的服务提供商
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion " 22.0.1"

    defaultConfig {
        applicationId "com.app.xxxx"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    } }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(path: ':vitamio')
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.android.support:design:22.2.1'
    compile 'com.android.support:support-v4:22.2.1'
    }

然后,在命名空间

之后创建put
votable

然后将其添加到php artisan make:provider RelationServiceProvider 方法

use Illuminate\Database\Eloquent\Relations\Relation;

希望它有所帮助! :)