多态关系投票

时间:2018-02-17 17:21:57

标签: laravel relationship vote

我对评论和帖子的投票存在一些问题。我希望你能帮助我。

我希望允许用户向上或向下投票和评论。

我的关系看起来像这样:

投票:

class Vote extends Model{
protected $fillable= ['value', 'user_id', 'voteable_type', 'voteable_id'
];

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

}

Voteable:

public function up()
{
    Schema::create('voteables', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('voteable_id');
        $table->string('voteable_type');
        $table->integer('value');
        $table->timestamps();

        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

发布和评论模型:

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

我是否还需要与用户建立关系,以便查看用户是否已投票?

public function isvotedBy(User $user)
{
    return $user->votes()
        ->where('user_id', $user->id)
        ->exists();
}

如何保存用户的投票?我试过这个:

public function storeVotePostUp(Post $post)
{

    $post->votes()->create([ 'value' => '1' ]);

{

但我收到错误消息:

  

SQLSTATE [42S02]:未找到基表或视图:1146表'DBName.votes'不存在(SQL:插入投票(value,voteable_id,voteable_type,updated_at,created_at)值(1,1,App) \ Post,2018-02-17 16:58:58,2018-02-17 16:58:58))   ......

1 个答案:

答案 0 :(得分:0)

By default convention,名为Vote的模型将映射到名为votes的表。由于您使用voteables作为表名,因此您需要告诉您的模型新表名应该是什么。

class Vote extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'voteables';
}

或者,您可以将表格从voteables重命名为votes