$ this-> Model-> save (): что не так с этим кодом? - PullRequest
0 голосов
/ 17 ноября 2011

Я новичок в cakePHP, я хочу сохранить некоторые данные в моей базе данных, но всегда получаю сообщение: Извините, ошибка при сохранении данных.

Вот мой код: (Контроллер: UsersController.php: (и я добавил UserState модели в массив $uses)

if($onbreak == 'true'){
    $userStatus = 1;
   //$response['userStatus'] = 1;
} else {
    $userStatus = 0;
    //$response['userStatus'] = 0;
}

//add the new user_status to the $newUserState
$newUserState['UserState']['user_id'] = $userID;// $userID = 1
$newUserState['UserState']['user_status'] = $userStatus;
//adding values for fields which should not be NULL
$newUserState['UserState']['user_phone_nb'] = '4343';

//

saving data
if($this->UserState->save($newUserState)){
    $response['success'] = 'true';
    $response['message'] = '';
}else{
    $response['success'] = 'false';
    $response['message'] = 'Sorry, Error while saving data.';
}      

Заранее спасибо

РЕДАКТИРОВАТЬ: Структура таблицы пользовательских состояний:

id: первичный ключ BIGINT AUTO INCREMENT, user_id: INT NOT NULL, user_status: SMALLINT NOT NULL, user_phone_nb = VARCHAR (15) NULL

Модель Usertate:

class Userstate extends AppModel {

    var $useTable = 'userstates';
    public $name = 'UserState';
}

РЕДАКТИРОВАТЬ 2:

когда я отлаживаю переменную $ newUserState, я получаю это (кажется, это нормально):

Array
(
    [UserState] => Array
        (
            [user_id] => 18
            [user_status] => 0
            [user_phone_nb] => 4343
        )

)

Ответы [ 5 ]

2 голосов
/ 17 ноября 2011

Я не уверен, что вы здесь делаете, не могли бы вы опубликовать свою структуру таблицы и генерирует торт вставки запроса?Внизу вы обнаружите, что если вы используете стандартную разметку тортов и у вас включен режим отладки.

Я подозреваю (но не уверен без дополнительных данных), что в таблице есть еще одно поле, для которого необходимо значение (не может быть нулевым).

1 голос
/ 17 ноября 2011

Я предполагаю, что поле в БД - 'userStatus', и для сохранения есть только одно значение.Но это должно сработать, и вы сможете расширить его, чтобы сохранить другие значения.

Надеюсь, это поможет.

Сохранение новой записи

if($onbreak == 'true'){
    $userStatus = 1;
} else {
    $userStatus = 0;
}

//add the new user_status to the $newUserState
$newUserState['UserState']['user_id'] = $userID;// $userID = 1
$newUserState['UserState']['user_status'] = $userStatus;
//adding values for fields which should not be NULL
$newUserState['UserState']['user_phone_nb'] = ' ';

// Must include id as it is a primary Key and thus required for saving.
$newUserState['UserState']['id'] = $userstate_id;


//saving data
if($this->UserState->save($newUserState)){
    $response['success'] = 'true';
    $response['message'] = '';
}else{
    $response['success'] = 'false';
    $response['message'] = 'Sorry, Error while saving data.';
}

Хорошо, попробуйте это.

Переименуйте вашу модель в user_state.php

Затем добавьте к ней следующее, основываясь на кулинарной книге Cake 1.2 http://book.cakephp.org/view/436/useTable

<?php 
class Userstate extends AppModel {

    var $useTable = 'userstates';
    public $name = 'UserState';
}

Также в config / core.php убедитесь, что строка с отладкой выглядит следующим образом.

Configure::write('debug', 2);

Попробуйте и дайте мне знать ваши результаты.

0 голосов
/ 25 марта 2012

Несколько советов в конце:

  1. Для таких случаев было бы неплохо иметь несколько наборов валидации, сделанных возможным: http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

  2. В следующий раз отправьте полный код. О проверке можно было бы догадаться, если бы вы не опубликовали только 4-строчное представление вашей модели, которое все считали окончательным.

  3. Вы должны включить дамп sql в свой макет. Он не будет отображаться в режиме реального времени из-за DEBUG => 0 и поможет вам в таких ситуациях.

  4. Я думаю, что имя класса модели UserState должно быть "UserState" и, как уже упоминалось, имя файла "user_state.php". Это спасло бы строку кода: P

Приветствие func0der

0 голосов
/ 21 ноября 2011

я нашел решение,

в моей модели, у меня есть переменная $validate с некоторыми параметрами, для которой переменная required установлена ​​в true. так что у меня есть три решения:

Первый:

просто комментирует переменную и не использует ее ^^

Второе:

просто инициализируйте необходимые переменные значением по умолчанию.

Третье:

я обнаружил, что в документе мы можем указать cakePHP сохранять наши данные без проверки:

save(array
$donnees = null, boolean $valider = true, array $listeDesChamps = array())

так что все, что я сделал, это сохранил данные и передал второй параметр с ложным значением, как это: $this->UserState->save($newUserState, false);, (лично я использовал это Третье решение ^^)

Спасибо всем за помощь:)

С уважением,

0 голосов
/ 17 ноября 2011

Работает ли это для вас:

$this->UserState->set('UserStatus', 'New title for the article');
$this->UserState->save();

Надеюсь, это поможет

...