gpt4 book ai didi

php - 使用 laravel 高级 where 子句运行查询

转载 作者:行者123 更新时间:2023-11-29 06:09:45 26 4
gpt4 key购买 nike

假设我有一个像这样的 Course 模型:

class Course extends Model
{
public function users ()
{
return $this->belongsToMany('App\User', 'course_user', 'course_id', 'user_id');

}

public function lessons ()
{
return $this->hasMany('App\Lesson', 'course_id', 'course_id');
}
}

类(class)字段是:

course_id
title

每门类(class)可以有多节课。

类(class) 模型如下:

class Lesson extends Model
{
public function course ()
{
return $this->belongsTo('App\Course', 'course_id', 'course_id');
}
public function users ()
{
return $this->belongsToMany('App\User', 'lesson_user', 'lesson_id', 'user_id');
}
}

它的字段是:

lesson_id
title
course_id

如您所见,CourseLesson 之间存在 OneToMany 关系,UserCourse 之间存在 ManyToMany 关系>.

UserCourse 名为 ~course_user 的数据透视表具有以下字段:

course_id
user_id

另一方面,UserLesson 之间存在多对多关系。那些名为 lesson_user 并具有以下字段的数据透视表:

lesson_id
user_id
passed

passed 字段显示用户在类(class)中的状态。如果为 0 则表示用户还没有通过,否则他通过了。

User 模型如下:

class User extends Model
{
public function lessons()
{
return $this->belongsToMany('App\Lesson', 'lesson_user', 'user_id', 'lesson_id')
}
public function courses ()
{
return $this->belongsToMany('App\Course', 'course_user', 'user_id', 'course_id');
}
}

现在我想获取用户类(class)并通过最佳方式(例如嵌套的 where 子句)计算每个类(class)中通过类(class)的百分比。

最佳答案

我认为这可能不是最好的方法。但易于理解和维护

$courses = $user->courses->map(function($cource){
$all_lessions = $cource->pivot->count();
$done_lessions = $cource->pivot->where(passed,'<>',0)->count();
$percent = $done_lessions * 100 / $all_lessions;
return $cource->push(['percent'=>$percent]);
});

现在可以通过

foreach ($courses as $cource){
$cource->percent;
$cource->title;
//...
}

关于php - 使用 laravel 高级 where 子句运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39017856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com