Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как проверить несколько столбцов?

Автор вопроса: thushОтветов: 4

Мне нужно проверить, соответствует ли schedules_id запросу schedules_id, затем нужно проверить profile "забронировано" или "ожидание", затем нужно передать все "забронировано" значения profile seat в blade.php. Как я могу это сделать или если другой способ или логика сделать это, пожалуйста, предложите мне, я новичок в laravel

как я получаю данные сейчас:

class PassengersController extends Controller
{
    public function booking(Request $request)
    {
        //river is used to pass important params with flow of it from page to page
        $seat         = $request->seat;
        $buses_id     = $request->buses_id;
        $schedules_id = $request->schedules_id;
        $data         = Buses::where('buses_id', $buses_id)->first();
        $seat         = json_decode($data->seat_layout, true);
        $front        = json_decode($data->front_layout, true);
        $bookingSeat  = Bookings::whereColumn('schedules_id', 'schedules_id')->get();

        $bookingSeat = $bookingSeat->map(function ($bookSeat) {
            $bookSeat->seat = explode(",", $bookSeat->seat);
            return $bookSeat;
        });

        return view('frontend.booking', ['seat' => $seat, 'buses_id' => $buses_id, 'schedules_id' => $schedules_id, 'front' => $front, 'bookingSeet' => $bookingSeat]);

    }
}

лезвие.php

<div class="bus">
@foreach($seat as $key => $item)
@foreach($bookingSeet as $seer)
   <div class="col-md-1">
   <div class="seats back seats
   @if(in_array($item['name'], $seer['seat']))
   activeSeat
   @endif"
   data-id="{{$key}}">
   <div class="special-attributes"></div>
   @if(isset($item['name'])){{$item['name']}}@else 11A @endif

   <input type="checkbox" name="seat_id[]" id="{{$key}}" value="{{$key}}">

   </div>
   </div>
@endforeach
@endforeach
</div>

Таблица

bookings_id users_id schedules_id buses_id routes_id seat price profile
    1           1         6           1       3        1  Null  pending
    2           1         6           1       3        2  Null  booked
    3           1         6           1       3        3  null  booked

Проблема с моим текущим кодом заключается в получении массива 2 со всеми столбцами таблицы заказов, как передать это значение в лезвие, когда я пытаюсь получить дублированный флажок, например. один автобус рассчитан на 50 мест, но теперь показывает 100 мест. места вроде 1,1,2,2 в поле зрения

Один массив выглядит так:

Collection {#426 ▼
  #items: array:2 [▼
    0 => Bookings {#431 ▼
      #fillable: array:7 [▶]
      #primaryKey: "bookings_id"
      #connection: "mysql"
      #table: null
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:10 [▼
        "bookings_id" => 1
        "users_id" => 1
        "schedules_id" => 6
        "buses_id" => 1
        "routes_id" => 3
        "seat" => "1"
        "price" => null
        "profile" => "pending"
        "created_at" => "2019-04-09 00:00:00"
        "updated_at" => "2019-04-09 00:00:00"
      ]
      #original: array:10 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
    1 => Bookings {#432 ▶}
  ]
}
  • Возможный дубликат Laravel 5 Eloquent, где и или в пунктах Danish Hakim Khan 15.04.2019
  • Вы проверили orWhere/whereIn ? Danish Hakim Khan 15.04.2019
  • @DanishHakimKhan нет, сэр, никогда не уставал или где, но я попробовал метод whereIn, но получил некоторую ошибку, я не использовал этот метод должным образом thush 15.04.2019
  • Проверьте красноречивую документацию, это довольно просто. Danish Hakim Khan 15.04.2019
  • @DanishHakimKhan хорошо, спасибо за ваше предложение, сэр! thush 15.04.2019

phplaravel

Ответы

Ответ 1 · guruprasad ks

попробуй это

Bookings::where('schedules_id', $schedules_id)->where('profile', 'booked')->get();

Ответ 2 · HerickC

Попробуй это:

$bookingSeat  = Bookings::where('schedules_id', $request->schedules_id)->where(function ($q) {
    $q->where('profile', 'booked')->orWhere('profile', 'pending');
})->get();

или это:

$profileTypes = ['booked', 'pending'];
$bookingSeat  = Bookings::where('schedules_id', $request->schedules_id)->whereIn('profile', $profileTypes)->get();

@Редактировать

Таким образом, если ваша таблица "Заказы" содержит все уже зарегистрированные места (от 1 до 50), она вернет все места, которые ваш профиль "забронировал" или "ожидает" для определенного автобуса, маршрута и времени.

$profileTypes = ['booked', 'pending'];
$bookingSeat  = Bookings::where('schedules_id', $request->schedules_id)
    ->whereIn('profile', $profileTypes)
    ->where('buses_id', $buses_id)
    ->where('routes_id', $request->route_id)
    ->get();

Ответ 3 · Chiel Bos

Вам разрешено использовать массивы как где.

Например:

$model->where([
      ['field-one', '=', 'valueOne'],
      ['field-two', '=', 'valueY']
]);

Ответ 4 · Prafulla Kumar Sahu

Если я правильно понимаю ситуацию, если в параметре schedules_id указана schedule_id, а профиль либо забронирован, либо находится в ожидании, вы хотите получить данные, запрос должен быть

Bookings::where('schedules_id', $schedules_id)->whereIn('profile', ['booked', 'pending'])->get();

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы