Система комментариев Laravel с полиморфным отношением - PullRequest
0 голосов
/ 15 февраля 2019

Моя система комментариев работает хорошо с полиморфным отношением.Но мне нужно кое-что объяснить, чтобы помочь мне решить эту проблему.

Существует страница бренда, и на этой странице бренда есть комментарии, также у бренда есть поддержка клиентов и комментарии для нее.Я не мог возражать, как сделать эти отношения красноречивыми.Некоторые бренды не имеют поддержки клиентов, поэтому мне нужно вернуть логическое значение, чтобы подтвердить это, но я даже не смог подготовить базу данных для этого отношения.

Бренд -> customerSupport -> Комментарии (Как сделать это отношение иструктура базы данных)

Нужно ли добавить несколько дополнительных столбцов в таблицу комментариев, чтобы сделать это правильно?Или просто нужно создать новый модал как 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 голосов
/ 15 февраля 2019

Я добавил столбец customer_support в таблицу брендов и комментариев.Таким образом, я проверяю, есть ли у бренда поддержка клиентов или нет, а затем получаю комментарии для поддержки каждого бренда.Я не уверен, что это лучший способ сделать это отношение.

Бренд Модал

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