嗨,我是Laravel和php的新手。在我的数据库中,每个学生在每个科目上都有三个分数,我需要检索它们并将每个学生的平均分数发送到视图。 我尝试按照以下方式进行操作,但是返回的值是一个对象(例如[5,4,3]),并且不允许我计算平均值。请告知我如何处理对象中的数据。
$students = Student::all();
foreach ($students as $student) {
$mathPoints = Point:: where('subject_id', 1)
->where('student_id', $student->id)
->pluck('points');
}
我尝试通过(array)方法将其转换为数组,但是之后无法使用array_sum计算值的总和。
更新:我的Point模型:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Point extends Model
{
//Get the student the credit points are related to
public function student()
{
return $this->belongsTo('App/Models/Student');
}
//Get the subject the credit points are related to
public function subject()
{
return $this->belongsTo('App/Models/Subject');
}
}
答案 0 :(得分:1)
Point::where('student_id', $student->id)->get()
将all()
与Eloquent一起使用时,它会为您查询。如果您使用where()
,则必须先使用get()
“获取”它,然后才能将其用作集合。
$mathPoints = Point::where('student_id', $student->id)
->get()
->pluck('points');
但是,我可能会考虑使用更复杂的查询来获取此数据,因为您很容易最终每页进行数百次查询,而不仅仅是1次。
答案 1 :(得分:1)
使用Model::avg('columnName')
来计算平均值。
在此处了解更多信息:https://laravel.com/docs/5.4/queries#aggregates
$students = Student::all();
foreach ($students as $student){
$mathPoints = Point::where(['subject_id'=>1,'student_id'=>$student->id])->avg('points');
$student->avgPoint=$mathPoints;
}
刀片内:
{{ $student->avgPoint}}