Я хочу получить записи базы данных, обрезать их, а затем снова вставить их. Я попытался сделать это с помощью функции trim- и pre_replace, но в обоих случаях только некоторые записи обрезаются, а не все.
Код правильный?
Я не знаю, что не так, может быть, что-то простое. Спасибо за любую помощь!
$table = DB::table('countries');
$result = $table->get();
$array = array();
foreach($result as $item){
$array[$item->id] = array(
'name_en' => preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $item->name_en),
'name_de' => preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $item->name_de)
);
}
foreach($array as $item_id => $newItem){
$update = $table->where('id', $item_id)->update($newItem);
}
Кажется, вы должны использовать:
$update = DB::table('countries')->where('id', $item_id)->update($newItem);
вместо:
$update = $table->where('id', $item_id)->update($newItem);
Это сработало для меня, но, конечно, для большого набора данных это займет много времени.
В качестве альтернативы вы можете обновить с помощью laravel, добавив параметр к объекту и вызвав метод save:
$table = DB::table('countries');
$result = $table->get();
$array = array();
foreach($result as $item){
$item->name_en = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $item->name_en);
$item->name_de = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $item->name_de);
$item->save();
}
Я думаю, что проблема была в том, что вы не обновили значение правильно. Я полагаю, что триммер должен работать на вас.