#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