this question is solved but maybe other people can find some help in it too.
i'm creating a project in zend framework 2 and doctrine 2. in my project i have system users and projects. a project can have multiple servers with multiple actions. every action is made by a user so all actions are linked to a user. everything works fine until i try to list all actions. than i get an error on the user linking and the error say: Missing value for primary key id on Sysusers\Entity\SystemUser
i had this problem a while ago too and i found that the @ORM\JoinColumn where flipped. but now everything seems ok in the code.
It would be great if someone can point me in the right direction. Thanks in advance!
this is my system user entity:
<?php
/**
* Auto generated by MySQL Workbench Schema Exporter.
* Version 2.1.3-dev (doctrine2-zf2inputfilterannotation) on 2014-07-15
* 14:04:16.
* Goto https://github.com/johmue/mysql-workbench-schema-exporter for more
* information.
*/
namespace Sysusers\Entity;
use Doctrine\ORM\Mapping as ORM;
use Zend\Crypt\Password\Bcrypt;
use Dashboard\Entity\ProjectAction;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Sysusers\Entity\SystemUser
*
* @ORM\Entity(repositoryClass="SystemUserRepository")
* @ORM\Table(name="system_users", uniqueConstraints={@ORM\UniqueConstraint(name="email_UNIQUE", columns={"email"})})
*/
class SystemUser implements \ZfcUser\Entity\UserInterface
{
/**
* Instance of InputFilterInterface.
*
* @var InputFilter
*/
private $inputFilter;
/**
* @ORM\Id
* @ORM\Column(type="integer", options={"unsigned"=true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=45)
*/
protected $first_name;
/**
* @ORM\Column(type="string", length=45)
*/
protected $last_name;
/**
* @ORM\Column(type="string", length=45)
*/
protected $email;
/**
* @ORM\Column(type="string", length=250)
*/
protected $password;
/**
* @ORM\OneToMany(targetEntity="Dashboard\Entity\ProjectAction", mappedBy="systemUser")
* @ORM\JoinColumn(name="system_users_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $projectActions;
public function __construct()
{
$this->projectActions = new ArrayCollection();
}
/**
* Set the value of id.
*
* @param integer $id
* @return \Sysusers\Entity\SystemUser
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get the value of id.
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of first_name.
*
* @param string $first_name
* @return \Sysusers\Entity\SystemUser
*/
public function setFirstName($first_name)
{
$this->first_name = $first_name;
return $this;
}
/**
* Get the value of first_name.
*
* @return string
*/
public function getFirstName()
{
return $this->first_name;
}
/**
* Set the value of last_name.
*
* @param string $last_name
* @return \Sysusers\Entity\SystemUser
*/
public function setLastName($last_name)
{
$this->last_name = $last_name;
return $this;
}
/**
* Get the value of last_name.
*
* @return string
*/
public function getLastName()
{
return $this->last_name;
}
/**
* Set the value of email.
*
* @param string $email
* @return \Sysusers\Entity\SystemUser
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get the value of email.
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Set the value of password.
*
* @param string $password
* @return \Sysusers\Entity\SystemUser
*/
public function setPassword($password, $hash = true)
{
if ($hash) {
$crypt = new Bcrypt();
$password = $crypt->create($password);
}
$this->password = $password;
return $this;
}
/**
* Get the value of password.
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Add ProjectAction entity to collection (one to many).
*
* @param \Dashboard\Entity\ProjectAction $projectAction
* @return \Sysusers\Entity\SystemUser
*/
public function addProjectAction(ProjectAction $projectAction)
{
$this->projectActions[] = $projectAction;
return $this;
}
/**
* Remove ProjectAction entity from collection (one to many).
*
* @param \Dashboard\Entity\ProjectAction $projectAction
* @return \Sysusers\Entity\SystemUser
*/
public function removeProjectAction(ProjectAction $projectAction)
{
$this->projectActions->removeElement($projectAction);
return $this;
}
/**
* Get ProjectAction entity collection (one to many).
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getProjectActions()
{
return $this->projectActions;
}
/**
* Populate entity with the given data.
* The set* method will be used to set the data.
*
* @param array $data
* @return boolean
*/
public function populate(array $data = array())
{
foreach ($data as $field => $value) {
$setter = sprintf('set%s', ucfirst(
str_replace(' ', '', ucwords(str_replace('_', ' ', $field)))
));
if (method_exists($this, $setter)) {
$this->{$setter}($value);
}
}
return true;
}
/**
* Return a array with all fields and data.
* Default the relations will be ignored.
*
* @param array $fields
* @return array
*/
public function getArrayCopy(array $fields = array())
{
$dataFields = array('id', 'first_name', 'last_name', 'email', 'password');
$relationFields = array();
$copiedFields = array();
foreach ($relationFields as $relationField) {
$map = null;
if (array_key_exists($relationField, $fields)) {
$map = $fields[$relationField];
$fields[] = $relationField;
unset($fields[$relationField]);
}
if (!in_array($relationField, $fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $relationField)))));
$relationEntity = $this->{$getter}();
$copiedFields[$relationField] = (!is_null($map))
? $relationEntity->getArrayCopy($map)
: $relationEntity->getArrayCopy();
$fields = array_diff($fields, array($relationField));
}
foreach ($dataFields as $dataField) {
if (!in_array($dataField, $fields) && !empty($fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $dataField)))));
$copiedFields[$dataField] = $this->{$getter}();
}
return $copiedFields;
}
public function __sleep()
{
return array('id', 'first_name', 'last_name', 'email', 'password');
}
public function getUsername()
{
return $this->getFirstName() . ' ' . $this->getLastName();
}
public function getDisplayName()
{
return $this->getFirstName() . ' ' . $this->getLastName();
}
public function getState()
{
return false;
}
}
this is my projects entity:
<?php
/**
* Auto generated by MySQL Workbench Schema Exporter.
* Version 2.1.3-dev (doctrine2-zf2inputfilterannotation) on 2014-06-28
* 14:43:09.
* Goto https://github.com/johmue/mysql-workbench-schema-exporter for more
* information.
*/
namespace Dashboard\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Dashboard\Entity\Project
*
* @ORM\Entity(repositoryClass="ProjectRepository")
* @ORM\Table(name="projects")
*/
class Project
{
/**
* @ORM\Id
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
protected $id;
/**
* @ORM\Column(nullable=true)
*/
protected $last_action;
/**
* @ORM\OneToMany(targetEntity="Server", mappedBy="project")
* @ORM\JoinColumn(name="projects_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $servers;
public function __construct()
{
$this->servers = new ArrayCollection();
}
/**
* Set the value of id.
*
* @param integer $id
* @return \Dashboard\Entity\Project
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get the value of id.
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of last_action.
*
* @param $last_action
* @return \Dashboard\Entity\Project
*/
public function setLastAction($last_action)
{
$this->last_action = $last_action;
return $this;
}
/**
* Get the value of last_action.
*
* @return
*/
public function getLastAction()
{
return $this->last_action;
}
/**
* Add Server entity to collection (one to many).
*
* @param \Dashboard\Entity\Server $server
* @return \Dashboard\Entity\Project
*/
public function addServer(Server $server)
{
$this->servers[] = $server;
return $this;
}
/**
* Remove Server entity from collection (one to many).
*
* @param \Dashboard\Entity\Server $server
* @return \Dashboard\Entity\Project
*/
public function removeServer(Server $server)
{
$this->servers->removeElement($server);
return $this;
}
/**
* Get Server entity collection (one to many).
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getServers()
{
return $this->servers;
}
/**
* Populate entity with the given data.
* The set* method will be used to set the data.
*
* @param array $data
* @return boolean
*/
public function populate(array $data = array())
{
foreach ($data as $field => $value) {
$setter = sprintf('set%s', ucfirst(
str_replace(' ', '', ucwords(str_replace('_', ' ', $field)))
));
if (method_exists($this, $setter)) {
$this->{$setter}($value);
}
}
return true;
}
/**
* Return a array with all fields and data.
* Default the relations will be ignored.
*
* @param array $fields
* @return array
*/
public function getArrayCopy(array $fields = array())
{
$dataFields = array('id', 'last_action');
$relationFields = array();
$copiedFields = array();
foreach ($relationFields as $relationField) {
$map = null;
if (array_key_exists($relationField, $fields)) {
$map = $fields[$relationField];
$fields[] = $relationField;
unset($fields[$relationField]);
}
if (!in_array($relationField, $fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $relationField)))));
$relationEntity = $this->{$getter}();
$copiedFields[$relationField] = (!is_null($map))
? $relationEntity->getArrayCopy($map)
: $relationEntity->getArrayCopy();
$fields = array_diff($fields, array($relationField));
}
foreach ($dataFields as $dataField) {
if (!in_array($dataField, $fields) && !empty($fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $dataField)))));
$copiedFields[$dataField] = $this->{$getter}();
}
return $copiedFields;
}
public function __sleep()
{
return array('id', 'last_action');
}
}
and this is my project actions entity:
<?php
/**
* Auto generated by MySQL Workbench Schema Exporter.
* Version 2.1.3-dev (doctrine2-zf2inputfilterannotation) on 2014-07-15
* 14:04:16.
* Goto https://github.com/johmue/mysql-workbench-schema-exporter for more
* information.
*/
namespace Dashboard\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Dashboard\Entity\ProjectAction
*
* @ORM\Entity(repositoryClass="ProjectActionRepository")
* @ORM\Table(name="project_actions", indexes={@ORM\Index(name="fk_project_actions_system_users_idx", columns={"system_users_id"}), @ORM\Index(name="fk_project_actions_projects1_idx", columns={"projects_id"}), @ORM\Index(name="fk_project_actions_servers1_idx", columns={"servers_id"})})
*/
class ProjectAction
{
/**
* @ORM\Id
* @ORM\Column(type="integer", options={"unsigned"=true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column()
*/
protected $date_created;
/**
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
protected $system_users_id;
/**
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
protected $servers_id;
/**
* @ORM\Column(type="string", length=255)
*/
protected $commit_key;
/**
* @ORM\Column(type="integer", nullable=true, options={"unsigned"=true})
*/
protected $creates;
/**
* @ORM\Column(type="integer", nullable=true, options={"unsigned"=true})
*/
protected $updates;
/**
* @ORM\Column(type="integer", nullable=true, options={"unsigned"=true})
*/
protected $deletes;
/**
* @ORM\OneToMany(targetEntity="ActionFile", mappedBy="projectAction")
* @ORM\JoinColumn(name="project_actions_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $actionFiles;
/**
* @ORM\ManyToOne(targetEntity="Sysusers\Entity\SystemUser", inversedBy="projectActions")
* @ORM\JoinColumn(name="id", referencedColumnName="system_users_id", onDelete="CASCADE")
*/
protected $systemUser;
/**
* @ORM\ManyToOne(targetEntity="Server", inversedBy="projectActions")
* @ORM\JoinColumn(name="id", referencedColumnName="servers_id")
*/
protected $server;
public function __construct()
{
$this->actionFiles = new ArrayCollection();
}
/**
* Set the value of id.
*
* @param integer $id
* @return \Dashboard\Entity\ProjectAction
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get the value of id.
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set the value of date_created.
*
* @param $date_created
* @return \Dashboard\Entity\ProjectAction
*/
public function setDateCreated($date_created)
{
$this->date_created = $date_created;
return $this;
}
/**
* Get the value of date_created.
*
* @return
*/
public function getDateCreated()
{
return $this->date_created;
}
/**
* Set the value of system_users_id.
*
* @param integer $system_users_id
* @return \Dashboard\Entity\ProjectAction
*/
public function setSystemUsersId($system_users_id)
{
$this->system_users_id = $system_users_id;
return $this;
}
/**
* Get the value of system_users_id.
*
* @return integer
*/
public function getSystemUsersId()
{
return $this->system_users_id;
}
/**
* Get the value of projects_id.
*
* @return integer
*/
public function getProjectsId()
{
return $this->projects_id;
}
/**
* Set the value of servers_id.
*
* @param integer $servers_id
* @return \Dashboard\Entity\ProjectAction
*/
public function setServersId($servers_id)
{
$this->servers_id = $servers_id;
return $this;
}
/**
* Get the value of servers_id.
*
* @return integer
*/
public function getServersId()
{
return $this->servers_id;
}
/**
* Set the value of commit_key.
*
* @param string $commit_key
* @return \Dashboard\Entity\ProjectAction
*/
public function setCommitKey($commit_key)
{
$this->commit_key = $commit_key;
return $this;
}
/**
* Get the value of commit_key.
*
* @return string
*/
public function getCommitKey()
{
return $this->commit_key;
}
/**
* Set the value of creates.
*
* @param integer $creates
* @return \Dashboard\Entity\ProjectAction
*/
public function setCreates($creates)
{
$this->creates = $creates;
return $this;
}
/**
* Get the value of creates.
*
* @return integer
*/
public function getCreates()
{
return $this->creates;
}
/**
* Set the value of updates.
*
* @param integer $updates
* @return \Dashboard\Entity\ProjectAction
*/
public function setUpdates($updates)
{
$this->updates = $updates;
return $this;
}
/**
* Get the value of updates.
*
* @return integer
*/
public function getUpdates()
{
return $this->updates;
}
/**
* Set the value of deletes.
*
* @param integer $deletes
* @return \Dashboard\Entity\ProjectAction
*/
public function setDeletes($deletes)
{
$this->deletes = $deletes;
return $this;
}
/**
* Get the value of deletes.
*
* @return integer
*/
public function getDeletes()
{
return $this->deletes;
}
/**
* Add ActionFile entity to collection (one to many).
*
* @param \Dashboard\Entity\ActionFile $actionFile
* @return \Dashboard\Entity\ProjectAction
*/
public function addActionFile(ActionFile $actionFile)
{
$this->actionFiles[] = $actionFile;
return $this;
}
/**
* Remove ActionFile entity from collection (one to many).
*
* @param \Dashboard\Entity\ActionFile $actionFile
* @return \Dashboard\Entity\ProjectAction
*/
public function removeActionFile(ActionFile $actionFile)
{
$this->actionFiles->removeElement($actionFile);
return $this;
}
/**
* Get ActionFile entity collection (one to many).
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getActionFiles()
{
return $this->actionFiles;
}
/**
* Set SystemUser entity (many to one).
*
* @param \Sysusers\Entity\SystemUser $systemUser
* @return \Dashboard\Entity\ProjectAction
*/
public function setSystemUser(SystemUser $systemUser = null)
{
$this->systemUser = $systemUser;
return $this;
}
/**
* Get SystemUser entity (many to one).
*
* @return \Sysusers\Entity\SystemUser
*/
public function getSystemUser()
{
return $this->systemUser;
}
/**
* Set Server entity (many to one).
*
* @param \Dashboard\Entity\Server $server
* @return \Dashboard\Entity\ProjectAction
*/
public function setServer(Server $server = null)
{
$this->server = $server;
return $this;
}
/**
* Get Server entity (many to one).
*
* @return \Dashboard\Entity\Server
*/
public function getServer()
{
return $this->server;
}
/**
* Populate entity with the given data.
* The set* method will be used to set the data.
*
* @param array $data
* @return boolean
*/
public function populate(array $data = array())
{
foreach ($data as $field => $value) {
$setter = sprintf('set%s', ucfirst(
str_replace(' ', '', ucwords(str_replace('_', ' ', $field)))
));
if (method_exists($this, $setter)) {
$this->{$setter}($value);
}
}
return true;
}
/**
* Return a array with all fields and data.
* Default the relations will be ignored.
*
* @param array $fields
* @return array
*/
public function getArrayCopy(array $fields = array())
{
$dataFields = array('id', 'date_created', 'system_users_id', 'servers_id', 'commit_key', 'creates', 'updates', 'deletes');
$relationFields = array('systemUser', 'project', 'server');
$copiedFields = array();
foreach ($relationFields as $relationField) {
$map = null;
if (array_key_exists($relationField, $fields)) {
$map = $fields[$relationField];
$fields[] = $relationField;
unset($fields[$relationField]);
}
if (!in_array($relationField, $fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $relationField)))));
$relationEntity = $this->{$getter}();
$copiedFields[$relationField] = (!is_null($map))
? $relationEntity->getArrayCopy($map)
: $relationEntity->getArrayCopy();
$fields = array_diff($fields, array($relationField));
}
foreach ($dataFields as $dataField) {
if (!in_array($dataField, $fields) && !empty($fields)) {
continue;
}
$getter = sprintf('get%s', ucfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $dataField)))));
$copiedFields[$dataField] = $this->{$getter}();
}
return $copiedFields;
}
public function __sleep()
{
return array('id', 'date_created', 'system_users_id', 'servers_id', 'commit_key', 'creates', 'updates', 'deletes');
}
}