如何从不同的表中减去两个整数值

How to subtract two integer values from different tables

如何用table中mortalities中的number_of_mortality的值来减去人口中的table中的population的值?


例如

循环中有2个数据table
Id 1 -(日期范围从 9 月 3 日到 9 月 28 日)人口 = 3000
Id 2 -(日期范围从 10 月 1 日到 11 月 5 日)人口 = 9000

我的用户想要将一些死亡率放入循环 id 1 ,所以 he/she 进入死亡率模式。

用户输入日期属于周期id 1日期范围。 number_of_mortality的值为25,用户输入数据后,he/she点击添加提交到数据库。

提交后,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 table 连接到 cycles table 但 我不知道如何以及在哪里可以我通过使用 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();
    }

您可以使用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;
}