получить данные даты из таблицы, чтобы я мог использовать для углерода diffInDays () - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу получить date_start_raise таблицы cycles, чтобы я мог сделать куриный возраст с помощью carbon 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()
    ]);

, но у меня естьв сообщении об ошибке говорится, что

«Вызов функции-члена diffInDays () при нулевом значении»

значение $ start равно нулю.

Как я могу получить date_start_raise в cycles таблице ?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

$start = $value->start; должно быть $start = $value->data_start_raise;

Я не знаю, какой фреймворк для вас, но обычно, если все, что вам нужно, только 1 строка может попробовать 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()
    ]);
}
0 голосов
/ 29 ноября 2018
 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) ;
        }

Это код

0 голосов
/ 29 ноября 2018

Попробуйте этот код. Он сохранит Смертность внутри самого 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()
                       ]);
                  }
   }
...