CakePHP не сохраняет длинный текст

0

У меня одна большая проблема. У меня есть метод контроллера, который получает запросы POST, отформатированные в JSON.

Когда я сохраняю данные JSON, одно поле, которое является длинным текстом в MySQL, не сохраняется. Но если я пишу короткий текст, например "Hello World", он сохраняет на БД. Я не знаю, что здесь не так.

Это мой код Javascript:

                $http({
                    url: 'http://customblahblahblah',
                    method: 'POST',
                    data:   "user_id="+ user_id +
                    "&token="+ token +
                    "&object="+angular.toJson(myobject),....

Это мой php-код:

public function save(){
    if($this->request->is('post')){
        if($this->checkUser($this->request->data['user_id'], $this->request->data['token'])){
            $myObject = json_decode($this->request->data['object'], true);
            if($this->MyObject->save($myObject)){
                .....
            }
     ....
           }
         }
      }    

Что здесь не так?

Потому что если в свойстве установлен текст, подобный "Hello World", он остается сохраненным, но если я отправил длинный текст, например газетную статью, он, похоже, сохранит (потому что не генерирует исключение, а Model-> save() возвращает true), но данные не сохраняются.

  • 0
    Очевидно, у вас есть проблема с типом полей таблицы БД, где вы хотите сохранить текст.
  • 0
    Это установлено как длинный текст с сортировкой latin1_general_ci
Теги:
cakephp

2 ответа

0

Я прошел мимо этого! Столбец должен быть LONGTEXT или LONGBLOB (самый большой размер, который вы можете)

Если вы используете миграции, вам нужно создать

$table = $this->table('your_table');
$table->changeColumn('your_column', 'text', ['null' => true, 'limit' => MysqlAdapter::TEXT_LONG]);
$table->update();

Вы можете посмотреть здесь: http://docs.phinx.org/en/latest/migrations.html#limit-option-and-mysql

0

Вы декодируете строку json в объект и пытаетесь сохранить объект в текстовом поле. Я думаю, вам нужно сохранить его в БД как строку JSON, а затем расшифровать его позже, когда вы его прочитаете.

пытаться:

if($this->MyObject->save(json_encode($myObject))){
                .....
 }

Если у вас все еще есть проблемы, это может быть тип данных базы данных. Раньше я использовал просто text как тип данных для строк json.

  • 0
    Привет, спасибо за ваш ответ. Я проверил это, но у меня все еще проблемы. Я не знаю ... иногда это работает правильно, но большинство нет. Я использую текстовый текст ... Я не знаю
  • 0
    перед save() если вы debug($myObject); exit; это установлено с данными?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню