Я создаю базовый форум, есть много тем, и каждая тема имеет комментарии, комментарий или «комментируемый» может быть комментарием или ответом (прокомментировал комментарий), потому что я хочу иметь вложенные комментарии,вот где 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();
});
}
Вот где я черпал вдохновение: