在对象内处理数据

时间:2018-11-19 09:36:18

标签: php laravel-5

嗨,我是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');
    }
}

2 个答案:

答案 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}}