laravel обновляет массивы множественных запросов

#laravel #laravel-5 #eloquent

#laravel #laravel-5 #красноречивый

Вопрос:

Я действительно испытываю трудности с этим методом обновления, любая помощь будет сердечно оценена.

Я отправляю несколько автомобильных номерных знаков, которые связаны с резидентом, я могу успешно сохранить и повторно просмотреть их, теперь я хочу их обновить.

когда я возвращаюсь или включаю dd $request->cars , он выдает мне этот массив.

 array:2 [
0 => array:5 [
"id" => 10
"user_id" => 33
"car_number_plate" => "12f3456"
"created_at" => null
"updated_at" => null
]

1 => array:5 [
"id" => 11
"user_id" => 33
"car_number_plate" => "abc -123"
"created_at" => null
"updated_at" => null
]   
]
  

Здесь я нахожу связанный идентификатор, который необходимо обновить

 $userId = ResidentCar::where('user_id', $resident->id)->pluck('id')
->toArray();
  

он возвращает этот массив.

 array:2 [
0 => 10
1 => 11
]
  

Здесь я перебираю массив и пытаюсь его обновить.

 $input = $request-cars;

foreach ($input as $row)
{
$cars[] = [
    'user_id' => $resident->id,
    'car_number_plate' => $row['car_number_plate'],
];
}

ResidentCar::whereIn('id', $userId)->update(array($cars));
  

это выдает ошибку, Array to string conversion.

и если сделать это с

 ResidentCar::whereIn('id', $userId)->update($cars);
  

это выдает эту ошибку.

 Column not found: 1054 Unknown column '0' in 'field list' (SQL: update `resident_cars` set `0` = 33, 
  

Может кто-нибудь здесь, пожалуйста, помочь о том, как это решить, или какой-либо лучший подход к этому.

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

1. попробуйте поместить array cars снаружи foreach

2. вы закончили?? и вы не можете обновить несколько массивов подобным образом, вам нужно установить функцию обновления insight для-каждого пробованного??

3. вы неправильно используете следующую строку ResidentCar::whereIn('id', $userId)->update($cars); это когда вы хотите обновить несколько строк одними и теми же данными, если вы хотите обновить несколько строк разными данными, вам нужно выполнить многократные обновления.

4. @AgeValed, спасибо, не могли бы вы, пожалуйста, привести мне пример.

Ответ №1:

Как я уже говорил в комментарии, вам нужно выполнить одно обновление для каждой строки.

Если строка, которую вы хотите обновить, является $resident->id , а данные, которые вы хотите обновить, являются $row['car_number_plate'] , вам нужно выполнить следующее:

 $input = $request-cars;
foreach ($input as $row) {
  $data = [
    'car_number_plate' => $row['car_number_plate'],
  ];
  ResidentCar::where('id',$resident->id)->update($data);
}
  

Дайте мне знать, если сработает

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

1. Вызов функции-члена update() при null. это правильный способ? ResidentCar::find($resident-> id)-> update($data);

2. Отредактировано, я заменил find на where, предполагая id