У меня одна большая проблема. У меня есть метод контроллера, который получает запросы 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), но данные не сохраняются.
Я прошел мимо этого! Столбец должен быть 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
Вы декодируете строку json в объект и пытаетесь сохранить объект в текстовом поле. Я думаю, вам нужно сохранить его в БД как строку JSON, а затем расшифровать его позже, когда вы его прочитаете.
пытаться:
if($this->MyObject->save(json_encode($myObject))){
.....
}
Если у вас все еще есть проблемы, это может быть тип данных базы данных. Раньше я использовал просто text
как тип данных для строк json.
save()
если вы debug($myObject); exit;
это установлено с данными?