Пример модели:Упорно сериализованный объект в Учении
/** @Entity */
class Person{
/**
* @Id @Column(type="integer", nullable=false)
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column */
protected $name;
/** @Column(type="datetime") */
protected $created_at;
//setters and getters...
public function __construct($std){
$this->id = $std->id;
$this->nome = $std->nome;
$this->created_at = new DateTime;
}
}
Я использую JSON общаются между клиентом/сервером. мне нужно, чтобы получить JSON от клиента
{ "id": 123, "name": "john" }
и сохраняются, сохраняя поле «created_at» без изменений. Делать так:
$p = json_decode($string);
$person = new Person($p);
entity_manager->merge($person);
entity_manager->flush();
В этом случае объект обновляется успешно, но, очевидно, поле «created_at» устанавливается новое значение от «нового DateTime». я мог бы получить управляемый объект из БД, а затем просто изменить «имя», но я не хочу ненужную Select ..
В двух словах, как я могу выполнить что-то вроде этого:
UPDATE Person set name = "john" where id = 123
Есть ли аннотация, чтобы игнорировать свойство при обновлении? Есть ли способ установить свойство без изменений?
EDIT
После нескольких испытаний с использованием SqlLogger, я понял, что метод слияния() выполняет оператор SELECT, чтобы получить текущее состояние ... Итак, мое решение, сейчас, чтобы получить сам объект и замените только те значения, которые я хочу обновить. Что-то вроде:
$std = json_decode($string);
$p = entity_manager->find('Person', $std->id);
$p->name = $std->name;
entity_managet->flush();
Таким образом, число «выбирает» одно и то же, но я получаю, чтобы сохранить исходные значения из атрибутов, которые я не получаю от JSON.
Проблема с использованием определения столбца является то, что флаг CURRENT_TIMESTAMP ограничивается только один столбец в таблице ... вы не можете использовать его для автоматически установите созданную временную метку и последнюю обновленную временную метку. – nelsonec87
Я принял из-за очевидного 1-го предложения: «Учение нуждается в постоянном сущности ...». Это привело меня к большему количеству тестов и выяснило, что merge() также выполняет выбор в БД. – nelsonec87