#php #yii
#php #yii
Вопрос:
Я получаю сообщение об ошибке преобразования массива 500 в строку, которое, похоже, я не могу разрешить. Я получаю это, вставляя следующую строку кода, а также, если я помещаю строку кода в свою функцию обновления, она запускается.
$items[] = BookingRoom::model()->findAll('bookingId=:bookingId', array(':bookingId'=>1));
public function getItemsToUpdate(){
// create an empty list of records
$items = array();
// Iterate over each item from the submitted form
if (isset($_POST['BookingRoom']) amp;amp; is_array($_POST['BookingRoom'])) {
foreach ($_POST['BookingRoom'] as $item) {
// If item id is available, read the record from database
if ( array_key_exists('id', $item) ){
$items[] = BookingRoom::model()->findByPk($item['id']);
}
// Otherwise create a new record
else {
$items[] = new BookingRoom();
}
}
} else {
$items[] = BookingRoom::model()->findAll('bookingId=:bookingId', array(':bookingId'=>1));
}
return $items;
}
Функция обновления в том же контроллере бронирования:
public function actionUpdate($id)
{
$model=$this->loadModel($id);
$items = array();
$items=$this->getItemsToUpdate();
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['BookingRoom']))
{
$valid=true;
foreach($items as $i=>$item)
{
if(isset($_POST['BookingRoom'][$i]))
$item->attributes=$_POST['BookingRoom'][$i];
$valid=$item->validate() amp;amp; $valid;
}
$valid=$model->validate() amp;amp; $valid;
if($valid){
}
}
$this->render('update',
array('items'=>$items, 'model'=>$model));
}
Комментарии:
1. Эта строка
$items = ....
не должна быть$items[] = ....
2. Теперь это работает, спасибо. Не могли бы вы объяснить, почему это не работает? Я не могу поместить двумерный массив объектов в существующий массив?
3. @user3784836 вы можете добавлять результаты в массив, но вам придется использовать оператор » «. В результате
$items[] = ...
вы добавляете в массив один элемент, и этот элемент сам является массивом, содержащим найденные записи.
Ответ №1:
Эта строка $items = ...
не должна быть $items[] = ...
. Последний добавляет элемент в массив. findAll()
возвращает массив моделей, поэтому следует использовать первый.