具有多态关系的Laravel评论系统

时间:2019-02-15 10:17:10

标签: php laravel eloquent polymorphism

我的评论系统在多态关系方面运行良好。但是我需要清楚地解释一些事情,以帮助我首先解决这个问题。

有一个品牌页面,该品牌页面有评论,品牌也有客户支持和评论。我不介意如何与雄辩的人建立这种关系。一些品牌没有客户支持,因此我需要返回布尔值以确认这一点,但我什至无法为此关系准备数据库。

品牌->客户支持->注释(如何建立这种关系和数据库结构)

我是否需要在注释表中添加一些额外的列才能正确执行此操作?还是只需要在添加或列出评论时将新模式作为“ CustomerSupport”并导入到commentable_type中即可?

表结构

//Brands Table
id - name - slug - img - timestamps

//Comments Table
id - parent_id - user_id(fk) - commentable_id - commentable_type - timestamps

品牌模式

class Brand extends Model
{
    // Table Name
    protected $table = 'brands';

    // Primary Key
    public $primaryKey = 'id';

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

评论模式

class Comment extends Model
{
    //Table Name
    protected $table = 'comments';

    // Primary Key
    public $primaryKey = 'id';

    //Fillables ...

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

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

    //Comment belongs to brand
    public function brands()
    {
        return $this->belongsTo('App\Brand');
    }

    //Comment have many replies
    public function replies()
    {
        return $this->hasMany('App\Comment', 'parent_id');
    }
}

1 个答案:

答案 0 :(得分:0)

我在品牌和评论表中添加了一个customer_support列。通过这种方式,我要检查品牌是否有客户支持,然后获取每个品牌的客户支持的评论。我不确定这是建立这种关系的最佳方法。

品牌模式

public function customerSupport()
  {
    return $this->morphMany('App\Comment', 'commentable')->whereNull('parent_id')
    ->whereCustomerSupport(true);
  }