如何通过使用population
表中number_of_mortality的值减去总体来减少周期表中mortalities
的值?
周期表中有2个数据
ID 1 -(日期范围为9月3日至9月28日)人口= 3000
ID 2 -(日期范围为10月1日至11月5日)人口= 9000
我的用户想将多个死亡率纳入 id 1 周期,因此他/她进入了死亡率模态。
用户输入日期,它属于周期 id 1 日期范围。 number_of_mortality的值为25。用户输入数据后,他/她单击添加以提交到数据库。
提交后,第1个周期的人口数将减少,应该为8975(9000-25 = 8975)。
MortalityController.php(存储)
public function store(Request $request)
{
$this->validate($request, array(
'date_input' => 'required|date',
'number_of_mortality' => 'required|numeric',
));
$cycle = Cycle::select('id', 'date_start_raise')
->where('date_start_raise','<=',$request->get('date_input'))
->where('date_end_raise','>=',$request->get('date_input'))
->get();
$id = 0;
$chickenAge = 0;
$input= Carbon::parse($request->get('date_input'));
foreach($cycle as $value){
$id = $value->id;
}
if ($id) {
$start = Carbon::parse($value->date_start_raise);
$chickenAge = $start->diffInDays($input) ;
}
return Mortality::create([
'date_input' => request('date_input'),
'number_of_mortality' => request('number_of_mortality'),
'chicken_age' => $chickenAge,
'cause_of_death' => request('cause_of_death'),
'cycle_id' => $id,
'user_id' => Auth::id()
]);
}
我想出了如何通过使用日期将mortalities
表连接到cycles
表的方法,但是我不知道如何以及如何使用number_of_mortality减去代码来减少代码的位置人口。你能帮助我吗?谢谢
MoralalityController.php(更新)
public function update(Request $request, $id)
{
$mortality = Mortality::findOrFail($id);
//validate
$this->validate($request, array(
'date_input' => 'required|date',
'number_of_mortality' => 'required|numeric',
) );
$mortality->update($request->all());
}
MoralalityController.php(销毁)
public function destroy($id)
{
$mortality = Mortality::findOrFail($id);
$mortality->delete();
}
答案 0 :(得分:1)
您可以使用decrement()方法。
成功创建死亡率后,您可以减少周期中的人口:
商店:
public function store(Request $request)
{
$this->validate($request, array(
'date_input' => 'required|date',
'number_of_mortality' => 'required|numeric',
));
// Make sure you only get the correct cycle here
$cycle = Cycle::where('date_start_raise', '<=', $request->get('date_input'))
->where('date_end_raise', '>=', $request->get('date_input'))
->first();
$chickenAge = 0;
$input= Carbon::parse($request->get('date_input'));
if ($cycle) {
$start = Carbon::parse($cycle->date_start_raise);
$chickenAge = $start->diffInDays($input) ;
}
$mortality = Mortality::create([
'date_input' => request('date_input'),
'number_of_mortality' => request('number_of_mortality'),
'chicken_age' => $chickenAge,
'cause_of_death' => request('cause_of_death'),
'cycle_id' => $cycle->id ?? 0,
'user_id' => Auth::id()
]);
// decrement population after successfully creating the mortality
if ($cycle) {
$cycle->decrement('population', $mortality->number_of_mortality);
}
return mortality;
}
更新:
public function update(Request $request, $id)
{
$this->validate($request, array(
'date_input' => 'required|date',
'number_of_mortality' => 'required|numeric',
));
$mortality = Mortality::findOrFail($id);
$oldNumberOfMortality = $mortality->number_of_mortality;
// fill the model with the new attributes
$mortality->fill($request->all());
// check if number_of_mortality was changed
if ($mortality->isDirty('number_of_mortality')) {
$cycle = $mortality->cycle;
$difference = $oldNumberOfMortality - $mortality->number_of_mortality;
// check if the difference is positive or negative and increment or decrement
if ($difference < 0) {
$cycle->decrement('population', abs($difference));
} elseif ($difference > 0) {
$cycle->increment('population', $difference);
}
}
$mortality->save();
return mortality;
}