对于标题感到抱歉,但最好解释它。我们已经构建了一个内部网络应用程序,用于上传视频,以便像Instagram一样评论和评论视频。后端使用的是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();
有没有办法我在我不需要计数的雄辩中,只需要最喜欢计数的视频的编号,因为我将使用编号来获取视频信息的集合。对于noob问题抱歉,只是想知道是否有任何方法可以正确有效地做到这一点,因为我们期待着一些用户。
下面是关于表的附加信息
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。就像那样,你可以用左连接和groupby来计算总数,而不是计数。需要更多的结构... – JTheDev
对不起,伯爵也工作一样。总和只是另一种方法。但无论如何,关系应该是正确的...... – JTheDev
@JTheDev更新了表结构的问题 –