Как проверить, что значения массива флажков существуют из базы данных PHP Laravel? - PullRequest
3 голосов
/ 20 февраля 2020

Я хочу проверить, существуют ли страны в странах, и флажок будет отображаться. Значения прямо из базы данных. Я не могу установить значение на входе, так как это массив / несколько значений. Итак, я хочу проверить каждый массив, чтобы он был флажок.

Контроллер:

public function edit($id)
{
    $region = Region::find($id);
    $countries = Country::all();
    $country_region = DB::table('regions')
        ->select('countries.id', 'countries.name')
        ->join('country_region', 'regions.id', '=', 'country_region.region_id')
        ->join('countries', 'country_region.country_id', '=', 'countries.id')
        ->where('regions.id', '=', $id)
        ->get();

    $items = array(
        'region' => $region,
        'countries' => $countries,
        'country_region' => $country_region,
    );

    return view('admin.region.edit')->with($items);
}

лезвие

<div class="form-group">
    <label>Choose Country</label>
    <select id="test" type="checkbox" name="country_id[]">
        @foreach ($countries as $item)
        <option value="{{$item->id}}" selected @if (in_array($item->id, array_keys($country_region))) checked="checked"
            @endif>{{$item->name}}
        </option>
        @endforeach
    </select>
</div>

Как видите, я ставлю php утверждение внутри блейда, чтобы проверить, существует ли $ country_region в странах или нет. Я получил ошибки, относящиеся к массиву, например:

array_keys() expects parameter 1 to be array, object given 

База данных:

Таблица регионов страны: Country Region Table

Таблица регионов:

Region Table

Таблица стран: Country Table

Ответы [ 4 ]

0 голосов
/ 20 февраля 2020

$country_region не является массивом в вашем контроллере. Это Eloquent collection. Чтобы изменить его на массив, просто используйте toArray().

В контроллере замените это:

$items = array(
            'region' => $region,
            'countries' => $countries,
            'country_region' => $country_region,
    );

следующим:

$items = array(
            'region' => $region,
            'countries' => $countries,
            'country_region' => $country_region->toArray(),
    );
0 голосов
/ 20 февраля 2020

убедитесь, что $ country_region является массивом

0 голосов
/ 20 февраля 2020

Используйте pluck вместо select в запросе.

$country_region = DB::table('regions') 
     ->join('country_region', 'regions.id', '=', 'country_region.region_id')
     ->join('countries', 'country_region.country_id', '=', 'countries.id')
     ->where('regions.id', '=', $id)
     ->get()
     ->pluck('countries.name', 'countries.id');
0 голосов
/ 20 февраля 2020

Я не думаю, что вам нужна функция массива, такая как in_array, поскольку вы уже зацикливаете каждую страну, просто, если должно работать, также, пожалуйста, покажите содержимое таблиц, которые вы пытаетесь сравнить.

<div class="form-group">
    <label>Choose Country</label>
    <select id="test" type="checkbox" name="country_id[]">
        @foreach ($countries as $item)
        <option value="{{$item->id}}" selected @if ($item->id == $country_region.country.id) checked="checked"
            @endif>{{$item->name}}
        </option>
        @endforeach
    </select>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...