按大多数评论排序文章

时间:2016-10-28 11:00:38

标签: eloquent laravel-5.2 one-to-many

我有两张表articlescomments。有一对多的关系。一篇文章有​​很多评论,而另一方评论属于一篇文章。现在我想根据大多数评论对所有文章进行排序。

以下是表架构:

制品

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->string('title');
        $table->integer('category_id')->unsigned();
        $table->text('body');
        $table->string('tags');
        $table->string('slug')->unique();
        $table->string('image');
        $table->date('published_at');
        $table->timestamps();

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

评论

public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('blog_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->integer('comment_id')->nullable(); //parent comment's id if any
        $table->text('message');
        $table->timestamps();

        $table->foreign('blog_id')
            ->references('id')
            ->on('articles')
            ->onDelete('cascade');

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

以下是关系代码:

文章

/**
 * An article has many comments
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function comments()
{
    return $this->hasMany('App\Comment');
}

注释

/**
 * A comment is belongs to an article
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function article()
{
    return $this->belongsTo('App\Article');
}

任何帮助都会很明显。

  

我更喜欢Eloquent方式的解决方案。如果不可能,其他方式也可以。

1 个答案:

答案 0 :(得分:2)

您可以尝试:

func2
当您想要计算关系中的结果数而不实际加载它们时会使用

func1方法,这会在您的结果模型上放置{relation} _count列。