Мне кажется, что мне проще:
>>> import numpy as np
>>> l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> print (np.concatenate(l))
[1 2 3 4 5 6 7 8 9]
Это не хороший знак, когда тип экземпляра объекта должен меняться со временем. Я не говорю о понижении / повышении рейтинга здесь, а о необходимости изменить реальный тип объекта.
Прежде всего, позвольте мне сказать вам, почему это плохая идея:
Это связано с тем, что большинство языков не позволит вам изменить тип реального класса объекта во время выполнения (и, конечно, память, но я не хочу получать в детали). Некоторые из них позволяют вам это делать (иногда в скрученном виде, например, JVM), но это действительно не очень хорошая практика!
Чаще всего необходимость в этом заключается в плохих объектно-ориентированных проектных решениях.
По этим причинам Doctrine не позволит вам изменить тип объекта объекта. Конечно, вы могли бы написать простой SQL (в конце этого сообщения, но, пожалуйста, прочитайте!), Чтобы сделать изменение в любом случае, но вот два «чистых» варианта, которые я бы предложил:
I что вы уже сказали, что первый вариант не был вариантом, но я потратил некоторое время на запись этого сообщения, поэтому мне кажется, что я должен сделать его максимально полным для будущей ссылки.
Person
до Employee
, создайте новый экземпляр Employee и скопируйте данные, которые вы хотите скопировать из старого объекта Person, в объект Employee. Не забудьте удалить старый объект и сохранить новый. См. Связанные обсуждения здесь и здесь .
Теперь, вот простой метод SQL, о котором я говорил раньше, надеюсь, вам не понадобится его использовать!
Убедитесь, что ваш запрос очищен (так как запрос будет выполнен без какой-либо проверки).
$query = "UPDATE TABLE_NAME_HERE SET discr = 'employee' WHERE id = ".$entity->getId();
$entity_manager->getConnection()->exec( $query );
Вот документация и код метода exec, который находится в DBAL\Connection
(для вашей информации):
/**
* Execute an SQL statement and return the number of affected rows.
*
* @param string $statement
* @return integer The number of affected rows.
*/
public function exec($statement)
{
$this->connect();
return $this->_conn->exec($statement);
}