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

Мне нужно проверить, соответствует ли 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 ▶}
  ]
} 

person thush    schedule 15.04.2019    source источник
comment
Возможный дубликат Laravel 5 Eloquent, где и или в пунктах   -  person Danish Hakim Khan    schedule 15.04.2019
comment
Вы проверили orWhere/whereIn ?   -  person Danish Hakim Khan    schedule 15.04.2019
comment
@DanishHakimKhan нет, сэр, никогда не уставал или где, но я попробовал метод whereIn, но получил некоторую ошибку, я не использовал этот метод должным образом   -  person thush    schedule 15.04.2019
comment
Проверьте красноречивую документацию, это довольно просто.   -  person Danish Hakim Khan    schedule 15.04.2019
comment
@DanishHakimKhan хорошо, спасибо за ваше предложение, сэр!   -  person thush    schedule 15.04.2019


Ответы (4)


попробуй это

Bookings::where('schedules_id', $schedules_id)->where('profile', 'booked')->get();
person guruprasad ks    schedule 15.04.2019
comment
но получаю 2 массива со всеми столбцами таблицы заказов, как передать это значение в лезвие, когда я пытаюсь получить дублированный флажок, например. один автобус рассчитан на 50 мест, но теперь показывает 100 мест. места вроде 1,1,2,2 в поле зрения - person thush; 15.04.2019
comment
можете ли вы показать мне свой цикл foreach в файле лезвия, а также отправить вывод выше - person guruprasad ks; 15.04.2019
comment
удалите первый цикл foreach и попробуйте только второй цикл. это проблема цикла foreach после первого цикла, он снова зацикливается на том же $bookingseet - person guruprasad ks; 15.04.2019
comment
я не могу удалить этот bcz, я проверяю условие с помощью первого foreach, вы можете видеть это в лезвии. первый цикл имеет расположение мест, исходя из автобусного стола, затем проверьте второй цикл, является ли он забронированным или нет - person thush; 15.04.2019
comment
добавьте это условие в начало второго цикла, а затем попробуйте - person guruprasad ks; 15.04.2019
comment
получил ошибку bcz im, используя имя foreach в условии, сэр, мое условие@if(in_array($item['name'], $seer['seat'])) activeSeat @endif - person thush; 15.04.2019
comment
извините за беспокойство - person thush; 15.04.2019
comment
@foreach($bookingSeet as $seer) @if(in_array($item['name'], $seer['seat'])) .... @endif endforeach - person guruprasad ks; 15.04.2019
comment
но как вызвать класс ActiveSeat css, вы забыли, что в вашем состоянии, сэр? - person thush; 15.04.2019
comment
@thush вы можете напрямую вызвать положенный activeSeat в свой div, так как он удовлетворяет только в первую очередь - person guruprasad ks; 16.04.2019
comment
@guruprasadks я пробовал все ваши предложения, но у меня снова не сработало, я получаю дублированные места - person thush; 16.04.2019

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

$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();
person HerickC    schedule 15.04.2019
comment
но получаю 2 массива со всеми столбцами таблицы заказов, как передать это значение в лезвие, когда я пытаюсь получить дублированный флажок, например. один автобус рассчитан на 50 мест, но теперь показывает 100 мест. места вроде 1,1,2,2 в поле зрения - person thush; 15.04.2019
comment
Вероятно, у вас две шины, этот запрос не проверяет buses_id, возможно, вам нужно ограничить это... - person HerickC; 15.04.2019
comment
но оба идентификатора шины одинаковы, как я могу ограничить это, сэр? - person thush; 15.04.2019
comment
Из-за логики вашей таблицы, если есть более одной шины с одинаковым ID, то нужно изменить либо route_id, либо schedules_id. Все это нужно передать в Query, чтобы пользователь мог выбрать именно тот автобус, в нужном направлении, в нужное время. Я отредактирую ответ, чтобы обдумать это. - person HerickC; 15.04.2019
comment
нужны какие-либо изменения в blade.php, сэр? или я могу использовать свой старый? - person thush; 15.04.2019

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

Например:

$model->where([
      ['field-one', '=', 'valueOne'],
      ['field-two', '=', 'valueY']
]);
person Chiel Bos    schedule 15.04.2019
comment
Можете ли вы объяснить более ясно, сэр, где я хочу использовать это? - person thush; 15.04.2019

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

Bookings::where('schedules_id', $schedules_id)->whereIn('profile', ['booked', 'pending'])->get();
person Prafulla Kumar Sahu    schedule 23.08.2019