申し訳ありませんが、説明する方が良いです。我々はあなたがコメントすることができ、Instagramのようなビデオが好きな場所にビデオをアップロードする内部のWebアプリを構築しました。バックエンドはLaravel APIを使用しています。 Laravel:行数をカウントする必要がある関係に基づいて結果を得るには
が 好き
を多くの好きしている - - 毎日私たちは昨日からのような、ほとんどを得との関係は、これがビデオ のようである10本の動画に叫び声を配る必要はビデオ
class Stage extends Model
{
public function likes()
{
return $this->hasMany('App\likes', 'id');
}...
class Likes extends Model
{
public function likes()
{
return $this->belongsTo('App\Video', 'videoId');
}...
に属し
私たちは、以下のいずれかを行うことができます知っているが、両方のカウントを取得し、VIDEOID
DB::table('likes')
->select(DB::raw("
videoId,
count(*) as LikeCount"))
->where('createDate', '>=', Carbon::now()->subDay(1)->toDateString())
->where('createDate', '<', Carbon::now()->toDateString())
->groupBy('videoId')
->get();
は、方法は私にあります私はカウントを必要としない雄弁でこれを補完するだけで、ビデオ情報のコレクションを取得するためにIDを使用するので、カウントの数が最も多いビデオのIDを必要とします。私たちが多数のユーザーを期待しているので、正確かつ効率的なやり方があるのかどうか疑問に思うだけです。
はここ
Schema::create('video', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->integer('userId')->unsigned();
$table->string('name',255)->nullable();
$table->text('description')->nullable();
$table->string('status', 50)->nullable();
$table->text('video')->nullable();
$table->dateTime('createDate')->nullable();
$table->dateTime('upStageDate')->nullable();
$table->foreign('userId')->references('userId')->on('user')- >onDelete('cascade');
});
Schema::create('like', function (Blueprint $table) {
$table->integer('videoId')->unsigned();
$table->integer('userId')->unsigned();
$table->datetime('likeDate')->nullable();
$table->foreign('userId')->references('userId')->on('user')->onDelete('cascade');
$table->foreign('videoId')->references('id')->on('video')->onDelete('cascade');
});
あなたは左の結合で同じの基本的な実装を試しましたか?そうでない場合は、テーブルのようなビデオテーブルのテーブル構造を共有してください。私が理解していることは、あなたもユーザーに応じて好きなものを追跡しているということです。そうであれば、それぞれのようなものが行として表されます。その場合、「好き」という列を挿入して、挿入すると1に設定することができます。同様に、left joinとgroupbyを使って、数を数えずに合計を取ることができます。より多くのための構造が必要です... – JTheDev
申し訳ありませんが、カウントも同じ動作します。 Sumは単なる別の方法です。しかし、関係はとにかく適切でなければなりません... – JTheDev
@JTheDevはテーブル構造 –