Laravel:添加属于特定id的列的所有值



要理解我的问题,这里是我的数据库。

基本上,你可以创建一个";会话";具有不同的";日期"学校",";地方";。。。像这样:

id | starting | endding | places | school_id | published |

在这个会话中,您可以使用";启动";一小时和一个"小时";结束";小时,一个特定的老师";贡献者"受试者"日期";等等。。。像这样:

id | date | starting | endding | room | subject_id | contributor_id | course_session_id | level_id |

在我看来,我用这个函数计算所有课程的小时数

@foreach ($courseSession->lessons as $key => $lesson)     
<tbody>                 
<tr>
<td>  
{{$lesson->date}}            
</td>
<td>                                
{{$lesson->contributor->firstname}} {{$lesson->contributor->lastname}}
</td>
<td>          
{{$lesson->subject->name}}          
</td>
<td>
{{$lesson->level->name}}
</td>          
<td>
{{$lesson->starting}} - {{$lesson->endding}}
</td>
<td>
<?php
$dateDeb= strtotime($lesson->starting);
$dateFin=strtotime($lesson->endding);
$heureTot= date('H:i',$dateFin-$dateDeb);
?>
{{ $heureTot}} //It showing me how long the lessons is (like 2 hours)
</td>       
@endforeach

顺便说一下,这是我的控制器

public function pdfshow($id)
{
$session = CourseSession::find($id); 
$courseSession = CourseSession::where('id',$id)->first();

return view('fichestagepdf',['session'=>$session],["contributors" => Contributor::all(),'courseSession'=>$courseSession, 'levels'=>Level::all()]);
}

现在我想做的是计算每个贡献者所有课程的所有时间。所以"sum";每个";贡献者";。

我被如何选择每个贡献者和@foreach不重复的问题所阻止。

我想重用我的函数,就像添加所有";启动";以及";结束";每个贡献者的栏和";结束-开始"="totalhours";就像前面的函数一样。

课程表

我认为应该将函数从blade移动到另一个类操作,并从控制器中调用它。理想情况下,刀片文件不应该负责执行此类任务。

<?php
namespace AppActions;
class GetTotalContributions
{
public static function handle($lessons, $id = null)
{
return $id ? self::getTotal($lessons, $id) : self::getTotals($lessons));
}
private static function getTotals($lessons)
{
$contributions = [];
$lessonsWithContributions = [];
foreach ($lessons as $l) {
$l->contibution = array_key_exists($l->contributor_id, $contributions)
? $contributions[$l->contributor_id]
: self::getTotal($lessons, $l->contributor_id);
$contributions[$l->contributor_id] = $l->contibution;
$lessonsWithContributions[] = $l;
}
return $lessonsWithContributions;
}
private static function getTotal($lessons, $id)
{
return $lessons->where('contributor_id', $id)->reduce(
function  ($carry, $current) {
return $carry + self::getContribution($current)
}
);
}
private static function getContribution($lesseon)
{
return date('H:i', strtotime($current->endding) - strtotime($current->starting));
}
}

顺便说一句,我没有运行代码。可能会有一些问题,但它应该足够好,让你知道如何解决问题。

最新更新