Как решить проблему незаконного смещения строки в laravel

#php #mysql #laravel

#php #mysql #laravel

Вопрос:

Я новичок в разработке laravel. Мне нужно обновить значение динамического поля ввода. Я перепробовал так много кодов, но не могу обновить. Я получаю сообщение об ошибке «Недопустимое смещение строки ‘house_no’. Я привел ниже, используя свой код

Мой блейд-файл

 <div>
    <table>
        <tr>
           <th>House No</th>
           <th>Street Name</th>
           <th>Area</th>
           <th>Pincode</th>
        </tr>
        @foreach ($address as $addres)
        <tr>
            <td><input type="text" name="settings[{{$addres->house_no}}]" value="{{ $addres->house_no}}"  class="form-control" /></td>
            <td><input type="text" name="settings[{{$addres->street_name}}]" value="{{ $addres->street_name}}"  class="form-control" /></td>
            <td><input type="text" name="settings[{{$addres->area}}]" value="{{ $addres->area}}"  class="form-control" /></td>
            <td><input type="text" name="settings[{{$addres->pincode}}]" value="{{ $addres->pincode}}"  class="form-control" /></td>
        <tr>
        @endforeach
    </table>
    </div>
</div>
 

Мой файл контроллера

 public function updateUser(Request $request, $id)
{
    $user = $request->all();
    
    foreach ($request->settings as $key => $value) {
        Address::update([
            'house_no' => $value['house_no'],
            'street_name' => $value['street_name'],
            'area' => $value['area'],
            'pincode' => $value['pincode'],
        ]);
    }
}
 

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

1. пожалуйста, укажите больше примеров источников, связанных с вашей проблемой

2. это не то, как вы получаете доступ к значениям :/

3. $value в вашем цикле есть строка… ваш массив $request->settings имеет только одно измерение

4. см. Здесь для получения входных данных laravel.com/docs/8.x/requests#retrieving-input

5. Как я могу этого добиться?

Ответ №1:

Вам нужно будет добавить индекс к входным данным массива, которые вы создаете, где ключом для элемента является id значение записи ( settings[key][attribute] ) . На данный момент у вас есть одномерный массив, который на обратной стороне будет содержать только 1 набор атрибутов для адреса.

Предполагая $addresses , что это красноречивый набор моделей:

 @foreach ($addresses as $key => $address)
<tr>
    <td><input type="text" name="settings[{{ $key }}][house_no]" value="{{ $address->house_no}}"  class="form-control" /></td>
    <td><input type="text" name="settings[{{ $key }}][street_name]" value="{{ $address->street_name}}"  class="form-control" /></td>
    <td><input type="text" name="settings[{{ $key }}][area]" value="{{ $address->area}}"  class="form-control" /></td>
    <td><input type="text" name="settings[{{ $key }}][pincode]" value="{{ $address->pincode}}"  class="form-control" /></td>
<tr>
@endforeach
 

Тогда ваш цикл на обратной стороне может повторять «наборы» настроек:

 foreach ($request->input('settings', []) as $key => $value) {
    Address::whereKey($key)->update(
        'house_no' => $value['house_no'],
        'street_name' => $value['street_name'],
        'area' => $value['area'],
        'pincode' => $value['pincode'],
    ]);
}
 

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

1. Спасибо за ваш ответ. Я использовал этот код, и теперь получаю ошибку Undefined index: house_no

2. @Karthika извините, это была моя ошибка… обновлены имена ключей во входных данных формы