从 table 获取日期数据,以便我可以用于碳 diffInDays()

fetch date data from the table so that i can use for carbon diffInDays()

我想得到 cycles table 的 date_start_raise 这样我就可以通过使用碳 diffInDays()

来制作鸡龄

MortalityController.php:

public function store(Request $request)
{
    $this->validate($request, array(
    'date_input' => 'required|date',
    'number_of_mortality' => 'required|numeric',
    ) );

        $cycle = Cycle::select('id')
        ->where('date_start_raise','<=',$request->get('date_input'))
        ->where('date_end_raise','>=',$request->get('date_input'))
        ->get();

        $id = 0;
        foreach($cycle as $value){
            $id = $value->id;
        }

        $dateStart = Cycle::select('date_start_raise')
        ->where('id','=',$id)
        ->get();

        $start = Carbon::now() ;
        $input = new Carbon($request->get('date_input'));
        foreach($dateStart as $value){
            $start = $value->start;
        }

        $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()
    ]);

但是我有一个错误说

"Call to a member function diffInDays() on null"

$start 为空。

如何在 cycles table 中获取 date_start_raise?

试试这个code.It 将在 foreach 本身中保存死亡率

  public function store(Request $request)
     {
                $this->validate($request, array(
                'date_input' => 'required|date',
                'number_of_mortality' => 'required|numeric',
                ) );

                    $cycle = Cycle::select('id')
                    ->where('date_start_raise','<=',$request->get('date_input'))
                    ->where('date_end_raise','>=',$request->get('date_input'))
                    ->get();

                    $id = 0;
                    foreach($cycle as $value){
                        $id = $value->id;
                        $dateStart = Cycle::select('date_start_raise')
                                          ->where('id','=',$id)
                                          ->first();   
                        $start = Carbon::now() ;
                        $input = new Carbon($request->get('date_input'));
                        $a = $dateStart->date_start_raise;
                        $start = Carbon::parse($a);
                        $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()
                       ]);
                  }
   }

$start = $value->start; 应该是 $start = $value->data_start_raise;

我不知道你的框架是什么,但通常如果你只需要一行,可以尝试 first()、getFirst() 或 get('first'),我认为你可以使用Cycle::select('id', 'data_start_raise') 并在那里添加按条件排序,然后可以保存第二个查询。

我不知道什么是 Carbon::now(),但我认为你的逻辑是这样的:

$date = '2018-12-25';
$obj = Carbon::now();
$offset = $obj->diffInDays($date);

第一次,你定义了 $start = Carbon::now();但是在 foreach 中,您将 $start 覆盖为一个日期字符串,因此 diffInDays() 不是一个字符串的方法。

已更新

<?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'))
        ->orderBy('date_end_raise desc') //not sure, I've never used laravel
        ->limit(1) //not sure, I've never used laravel
        ->get();

    $id = 0;
    $chickenAge = 0;
    foreach($cycle as $value){
        $id = $value->id;
    }
    if ($id) {
        $start = new Carbon($value->date_start_raise);
        $chickenAge = $start->diffInDays(request('date_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()
    ]);
}
 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) ;
        }

这是代码