Laravel paginate полиморфные отношения, тема-> комментарии () - PullRequest
0 голосов
/ 08 ноября 2019

Я создаю базовый форум, есть много тем, и каждая тема имеет комментарии, комментарий или «комментируемый» может быть комментарием или ответом (прокомментировал комментарий), потому что я хочу иметь вложенные комментарии,вот где parent_id полезен. Мне интересно, являются ли мои полиморфные отношения лучшим способом для достижения этого, поэтому я открыт для любых предложений. Первая проблема, с которой я столкнулся, это то, что я не знаю, как сделать ajax-нумерацию темы-> комментариев ..., я подумал, что-то вроде Comment :: whereHas ('topic') ... но мои комментарии не имеютотношение темы, определенное в модели.

Я использую расширенную ajax-нумерацию laravel, как я могу разбить комментарии на страницы?

Модель темы:

class Topic extends Model
{


    protected $table = 'topics';

    public function author()
    {
        return $this->belongsTo('App\Models\User', 'user_id');
    }

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

public function up()
    {
        Schema::create('topics', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id')->index();
            $table->foreign('user_id')->references('id')->on('users');
            $table->string('title');
            $table->text('body');
            $table->string('url')->unique();
            $table->string('slug')->unique();
            $table->boolean('isVisible')->default(false);
            $table->timestamps();
        });
    }


}

Модель комментариев:

class Comment extends Model
{


    protected $table = 'comments';

    public function author()
    {
        return $this->belongsTo('App\Models\User', 'user_id');
    }

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


}


public function up()
    {
    Schema::create('comments', function (Blueprint $table) {
       $table->bigIncrements('id');
       $table->integer('user_id')->unsigned();
       $table->integer('parent_id')->unsigned();
       $table->integer('commentable_id')->unsigned();
       $table->string('commentable_type');
       $table->text('body');
       $table->timestamps();
    });
    }

Вот где я черпал вдохновение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...