Intereting Posts
Как я могу избежать <input file> удаляет значения после выбора файлов? Проблема MPTT (измененный обход дерева предзаказов) в PHP Как я могу изменить meta (alt и название) в миниатюре каталога, миниатюре продукта? – Woocomerce преимущества «HTTP-аутентификации с помощью PHP» вырезать многобайтовое пустое пространство из строки PHP как обновить LOB с помощью PHP в oracle? (OCI_INVALID_HANDLE) Laravel 5: использование SHA1 вместо Bcrypt Как использовать флажки для ввода true (1) или false (0) в mySQL И показывать, как указано в форме php / html? Почему «забытый пароль» плох? PHP | Почему я должен использовать статическую / приватную статическую функцию вместо функции public / private? Как хранить информацию о подключении db безопасно? Почему я не могу проверить свои данные и зарегистрировать свои данные в базе данных? abraham / twitteroauth отвечает на perticular твит в PHP Ошибка NameValuePair «NameValuePair не может быть разрешена к типу» Вызовите скрипт PHP со страницы JSP и покажите его вывод на странице JSP

CakePHP – Как обновить несколько записей

Как я могу обновить одно поле нескольких записей в CakePHP?

Я извлекаю несколько записей, используя $this->Item->find('all') и мне нужно установить разные значения для каждого из них и сохранить. я делаю

 $items = $this->Item->find('all', array( 'fields' => array('Item.id', 'Item.order'), 'conditions'=> array( 'Item.project_id =' => $this->request->params['project_id'], ), 'order' => array ('Item.order ASC') )); foreach($items as $key => $item) { $item->saveField('Item.order', rand(1, 10)); } 

но это вызывает ошибку, говоря

Неустранимая ошибка: вызов функции-члена saveField () для не-объекта

Что я делаю не так?

Обновление: обратите внимание, что это старый ответ, предназначенный для CakePHP 1.3. Для современного подхода см. Ответ ниже .

Попробуй это

 foreach($items as $key => $item) { $this->Item->id = $item['Item']['id']; $this->Item->saveField('order', rand(1, 10)); } 

Я бы сказал, что вы должны использовать CakePHP Save Many для повышения производительности.

Пример:

 $data = array( array( 'Item' => array('id' => 2, 'order' => rand(1,5)) ), array( 'Item' => array('id' => 3, 'order' => rand(1,5)) ), ); $Model->saveMany($data, array('deep' => true)); 

То, что вы делаете неправильно, состоит в том, что $item не является объектом (и не является items btw), поэтому вы не можете вызывать какие-либо методы. $items – это всего лишь массив со всеми результатами операции find() .

Что вам нужно сделать, так это использовать метод saveAll() и использовать его в соответствующем объекте, $this->Item в этом случае.

Более подробную информацию см. В нижней части этой страницы из документации .