2015-08-27 5 views
1

Я использую UpdateAll() вместо того, что учебник предложилCakePHP UpdateAll() не работает

$this->Post->id = $id;

У меня нет столбца ID в моей таблице. Когда я запускаю этот код -

public function edit($user_id = null) { 
    if (!$user_id) { 
     throw new NotFoundException(__('Invalid post')); 
    } 

    $user_info = array('conditions' => array('User.user_ID' => $user_id)); 
    $user = $this->User->find('all', $user_info); 
    if (!$user) { 
     throw new NotFoundException(__('Invalid User ID')); 
    } 

    if ($this->request->is('put')) { 
     $data = $this->request->input('json_decode'); 
     //$this->set('new_user', $data); 
     $this->User->updateAll(
     array('User.status' => 'ooactive'), //fields to update 
     array('User.user_id' => $user_id)); 
    } 
} 

Я получаю эту ошибку -

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ooactive' in 'field list' SQL Query: UPDATE Smooch . users AS User SET User . status = ooactive WHERE User . user_id = 3

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

EDIT:

Текущий код, я решил это сделать так, как показано в учебнике блога на CakePHP.org -

public function edit($user_id = null) { 
    if (!$user_id) { 
     throw new NotFoundException(__('Invalid post')); 
    } 

    $user_info = array('conditions' => array('User.user_ID' => $user_id)); 
    $user = $this->User->find('all', $user_info); 
    if (!$user) { 
     throw new NotFoundException(__('Invalid User ID')); 
    } 

    if ($this->request->is('put')) { 
     $this->User->user_id = "user_id"; 
     $data = $this->request->input('json_decode'); 
     if($this->User->save($data)); 
    }} 

ERROR -

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' SQL Query: INSERT INTO Smooch . users (status) VALUES ('inaaaaaaactive')

Это превращает его в INSERT заявление, не знаю, почему.

ответ

0

Ну, это нормально. В документации сказано: (http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-mixed-conditions)

The $fields array accepts SQL expressions. Literal values should be quoted manually using DboSource::value(). For example if one of your model methods was calling updateAll() you would do the following:

$db = $this->getDataSource(); 
$value = $db->value($value, 'string'); 
$this->updateAll(
    array('Baker.approved' => true), 
    array('Baker.created <=' => $value) 
); 

Таким образом, использование $db->value('ooactive', 'string'), чтобы избежать статуса.

+0

Я попытался выше, и это привело к большему количеству проблем, поэтому я попытался вернуться к тому, как говорят официальные учебники cakePHP, чтобы сделать это - $ this-> Post-> id = $ id; Вот где я думаю, что волшебство случается, что делает его оператором обновления. Как мне настроить этот код ($ this-> Post-> id = $ id;), если мой первичный ключ - user_id? Я буду обновлять свой пост, чтобы отразить текущий код. – retroCheck

+0

Вы можете установить первичный ключ в другое поле с помощью $ this-> Post-> primaryKey = 'field'; Я не знаю, работает ли это для вас. –

+0

, к сожалению, не работает. – retroCheck

0

Как указано, updateAll() не может использоваться только как save() в 2.x. Вам необходимо вручную указать ваш вклад, как таковой, он логически (и сообщение об ошибке указывает, что вам нужно использовать):

$this->User->updateAll( array('User.status' => '"ooactive"'), array('User.user_id' => $user_id) );

0

$ this-> Bookcopy-> UpdateAll ([ 'Bookcopy.status' => 'Недоступен'], [ 'Bookcopy.status' => 'ЗАПРОШЕННЫЙ'])

Ошибка: SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец 'доступен' в 'списке поля'

SQL-запрос: ОБНОВЛЕНИЕ practice_bookchum. bookcopies AS Bookcopy LEFT JOIN practice_bookchum. books_stores AS Book_Store ON (Bookcopy. book_store_idid) SET Bookcopy. status = ДОСТУПНО ГДЕ Bookcopy.status = 'ЗАПРОШЕННЫЙ'

Model :: UpdateAll (массив $ полей, смешанные $ условия)

ошибка возникает, когда я прохожу $ поля в качестве ассоциированного массива со значением

I did it....

$db = $this->Bookcopy->getDataSource(); 
$value = 'AVAILABLE'; 
$value = $db->value($value, 'String'); 

$this->Bookcopy->updateAll(['status' => $value],['Bookcopy.status'=>'REQUESTED']) 

{data: "Borrow", status: "success"} 
data:"Borrow" 
status:"success" 
Смежные вопросы