Условия Laravel в предложении Controller where

#php #if-statement #laravel #conditional-statements #clause

#php #if-оператор #laravel #условные операторы #предложение

Вопрос:

Я пытаюсь создать запрос на основе параметров URL. Когда контроллер загружен, мне нужно проверить, какие параметры были предоставлены, и создать запрос на их основе. Он работает со статическими значениями, но не работает с условными операторами. Правильный ли синтаксис laravel?

 class OrdenesController extends BaseController {

public function showOrdenes($action)
{
  $my_id = Auth::user()->id;
  $my_cod = Auth::user()->codprov;

  switch ($action) 
  {
    case 'list':
      $rows = DB::table('ordens')->count();
      if(Input::get("jtSorting"))
      {
       $search = explode(" ", Input::get("jtSorting"));            
       $numorden= Input::get("nro_orden");
       $filtros =explode(" ", $filtros);

       $data = DB::table("ordens")
        ->select(array('*', DB::raw('SUM(cant_pend) as cant_pend'), DB::raw('SUM(importe) as importe')))
        ->where('cod_prov', '=', $my_cod)

        ->where('nro_orden', '=', $numorden)///work

        ---------- ////no work
        if (Input::has('nro_orden')) {
           ->where('nro_orden', '=', $numorden)
        }
        ---------- /// no work

        ->groupBy('nro_orden')
        ->skip(Input::get("jtStartIndex"))
        ->take(Input::get("jtPageSize"))
        ->orderBy($search[0], $search[1])
        ->get();
      }
      return Response::json(
        array(
          "Result"      =>    "OK",
          "TotalRecordCount"  =>    $rows,
          "Records"     =>    $data
        )
      );
      break;

   };  
  }    
}
  

Ответ №1:

Вам не хватает переменных, нет? Вы не указали PHP, какую переменную / объект выполнять where() в вашем условии. Магия Laravel’s Eloquent (и многих других библиотек) заключается в том, что когда вы вызываете ее методы, она возвращает себя (объект) обратно, чтобы вы могли сразу вызвать другой метод.

Поэтому, когда вы делаете это:

 $data = DB::table("ordens")
    ->select(...)
    ->where(...);
  

совпадает с:

 $data = DB::table("ordens");
$data = $data->select(...);
$data = $data->where(...);
  

Но вы пытаетесь выполнить ->where(...) сразу после if условия. Вам нужно сообщить PHP, из какого объекта / переменной вы пытаетесь вызвать метод. Вот так:

 $num = Input::get("nro_orden");

$data = DB::table("ordens")
    ->select(array('*', DB::raw('SUM(cant_pend) as cant_pend'), DB::raw('SUM(importe) as importe')))
    ->where('cod_prov', '=', $my_cod);

if (Input::has('nro_orden')) {
    $data = $data->where('nro_orden', '=', $num);
}

$data = $data->groupBy('nro_orden')
    ->skip(Input::get("jtStartIndex"))
    ->take(Input::get("jtPageSize"))
    ->orderBy($search[0], $search[1])
    ->get();
  

Комментарии:

1. Большое спасибо Unnawut

2. Возможно, вы все же захотите уточнить свой вопрос, прежде чем получите больше отрицательных голосов. Попробуйте добавить сообщения об ошибках, которые вы получили при первом тестировании, могут помочь.

3. Я попробовал вашу помощь и показал это СООБЩЕНИЕ localhost / adpanel / public / getDataordenes / … 500 (внутренняя ошибка сервера)

4. Покажите нам ваше последнее сообщение об ошибке из app/storage/logs/laravel.log

5. Ах, я пропустил одну точку с запятой в своем ответе, теперь исправлено. Надеюсь, вы это заметили.