如何从不同的表中减去两个整数值
Posted
技术标签:
【中文标题】如何从不同的表中减去两个整数值【英文标题】:How to subtract two integer values from different tables 【发布时间】:2019-05-02 06:52:04 【问题描述】:如何通过使用mortalities
表中的 number_of_mortality 值减去总体来减少循环表中population
的值?
例如
周期表中有 2 个数据 Id 1 -(日期范围从 9 月 3 日到 9 月 28 日)人口 = 3000Id 2 -(日期范围从 10 月 1 日到 11 月 5 日)人口 = 9000
我的用户想将一些死亡率放入循环 id 1 ,所以他/她进入死亡率模式。
用户输入日期,属于循环id 1日期范围。 number_of_mortality的值为25。用户输入数据后,点击添加提交到数据库。
提交后,cycle id 1的population值会减少,应该是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 减去人口来减少代码强>。你能帮助我吗?谢谢
MortalityController.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());
MortalityController.php(销毁)
public function destroy($id)
$mortality = Mortality::findOrFail($id);
$mortality->delete();
【问题讨论】:
【参考方案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;
【讨论】:
先生,这段代码是做什么的?'cycle_id' => optional($cycle)->id ?? 0,
它使用cycle_id
或0
。可选的助手在那里,所以如果循环为空,它不会抛出异常。 docs
@Peejong 请参阅here 了解更多信息
@Remul 你能编辑答案吗? $start = Carbon::parse($value->date_start_raise);
应该是 $start = Carbon::parse($cycle->date_start_raise);
@Peejong 我更新了我的代码,它现在应该可以为你工作了。以上是关于如何从不同的表中减去两个整数值的主要内容,如果未能解决你的问题,请参考以下文章
如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?
如何使用 Nhibernate 从连接两个具有所有 id 的表中选择只有一个不同列的多个列是 UNIQUEIDENTIFIER