Я пытаюсь вставить новый объект/строку в базу данных. Объект создается следующим образом:Doctrine2 - Столбцы меняются на нуль перед очисткой
$nodeaccess = new Nodeaccess(); // A by doctrine2 generated entity
$nodeaccess->setAccesslevel(0);
$nodeaccess->setDraw(0);
$nodeaccess->setUserid($userid);
$nodeaccess->setNodename($this->getUser()->getUsername() . ' Node');
$nodeaccess->setMac($node);
Все столбцы таблицы установлены. Когда я печатаю $nodeaccess->getUserid()
и $nodeaccess->getMac()
, желаемые результаты печатаются. И они оба не пустые.
Но когда объект сохраняется так:
$em = $this->getDoctrine()->getManager();
$em->persist($nodeaccess);
$em->flush();
следующая ошибка происходит:
Исключение при выполнении «INSERT INTO nodeaccess (макинтош, идентификатор пользователя, AccessLevel, NODENAME, draw) VALUES (?,?,?,?,?) 'с params {"1": null, "2": null, "3": 0, "4": "Пример узла", "5": 0}:
SQLSTATE [23000]: ограничение целостности Нарушение т: 1048 Колонка «МКВ» не может быть нулевой
макинтош и идентификатор пользователя в сочетании является первичным ключом, и они оба являются внешними ключами, а также. Они настроены в модели, как это:
/**
* @var integer
*
* @ORM\Column(name="mac", type="bigint", nullable=false)
* @ORM\Id
*/
private $mac;
/**
* @var integer
*
* @ORM\Column(name="userID", type="integer", nullable=false)
* @ORM\Id
**/
private $userid;
Общественные аксессоров реализуются, и я попытался изменить поля для общественности, но это не помогло.
Update Аксессоры:
public function getMac()
{
return $this->mac;
}
public function setMac($mac)
{
$this->mac = $mac;
}
public function getUserid()
{
return $this->userid;
}
public function setUserid($userid)
{
$this->userid = $userid;
}
Update 2 Я изменил таблицу, теперь только mac
поле NULL. Новая модель:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="mac", type="bigint", nullable=false)
*/
private $mac;
/**
* @var integer
*
* @ORM\Column(name="userID", type="integer", nullable=false)
**/
private $userid;
UPDATE Действие контроллера:
public function inviteAction() {
$repository = $this->getDoctrine()
->getRepository('GeninnoEDSBundle:Nodeaccess');
$options = $repository->createQueryBuilder('na')
.......
->getQuery()
->getResult();
$form = $this->createFormBuilder()
->add('user', 'text', array(
'attr' => array(
'placeholder' => '+ Gebruiker'
)
))
->add('node', 'hidden')
->getForm();
if ($this->getRequest()->isMethod('POST')) {
$form->bind($this->getRequest());
if ($form->isValid()) {
$data = $form->getData();
$user_repository = $this->getDoctrine()
->getRepository('GeninnoEDSBundle:User');
$user = $user_repository->findOneBy(array('username' => $data['user']));
$node_repository = $this->getDoctrine()
->getRepository('GeninnoEDSBundle:Node');
$node = $node_repository->find($data['node']);
$nodeaccess = new Nodeaccess();
$nodeaccess->setAccesslevel(0);
$nodeaccess->setDraw(0);
$nodeaccess->setUserid($user);
$nodeaccess->setNodename($this->getUser()->getUsername() . ' Node');
$nodeaccess->setMac($node);
$em = $this->getDoctrine()->getManager();
$em->persist($nodeaccess);
$em->flush();
}
}
return array('options' => $options, 'form' => $form->createView());
}
Постарайтесь сделать атрибуты защищенными или общедоступными и реализовать аксессоры. – Sammy
Аксессуи реализованы и изменение полей для общественности не помогло. Я обновлю вопрос – Raymen
@RaymenScholten, если вы 'var_dump' объект перед его сохранением, имеют ли свойства указанные значения? – gilden