Catchable Fatal Error: Object of class AppBundle\Entity\Users could not be converted to string - orm

I am new to symfony and doctrine. I have 2 entities in doctrine one is Users and other is ActivityLogs here is the classes.
Users.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Users
*
* #ORM\Table(name="ms_users")
* #ORM\Entity
*/
class Users
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="username", type="string", length=50)
*/
private $username;
/**
* #var string
*
* #ORM\Column(name="verification_tokken", type="string", length=100)
*/
private $verificationTokken;
/**
* #var string
*
* #ORM\Column(name="tokken_expiry_time", type="string", length=50)
*/
private $tokkenExpiryTime;
/**
* #var integer
*
* #ORM\Column(name="is_two_way_auth_enabled", type="boolean")
*/
private $isTwoWayAuthEnabled;
/**
* #var string
*
* #ORM\Column(name="verification_pin", type="string", length=50)
*/
private $verificationPin;
/**
* #var string
*
* #ORM\Column(name="slug", type="string", length=250)
*/
private $slug;
/**
* #var string
*
* #ORM\Column(name="date_string", type="string", length=50)
*/
private $dateString;
/**
* #var string
*
* #ORM\Column(name="date_time_string", type="string", length=50)
*/
private $dateTimeString;
/**
* #var integer
*
* #ORM\Column(name="is_active", type="integer")
*/
private $isActive;
/**
* #var integer
*
* #ORM\Column(name="is_deleted", type="integer")
*/
private $isDeleted;
/**
* #var integer
*
* #ORM\Column(name="is_editable", type="integer")
*/
private $isEditable;
/**
* #var string
*
* #ORM\Column(name="last_updated_on", type="string", length=50)
*/
private $lastUpdatedOn;
/**
* #var integer
*
* #ORM\Column(name="school_id", type="integer")
*/
private $schoolId;
/**
* #var integer
*
* #ORM\Column(name="updated_by", type="integer")
*/
private $updatedBy;
/**
* Get id
*
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set username
*
* #param string $username
*
* #return Users
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Get username
*
* #return string
*/
public function getUsername()
{
return $this->username;
}
/**
* Set verificationTokken
*
* #param string $verificationTokken
*
* #return Users
*/
public function setVerificationTokken($verificationTokken)
{
$this->verificationTokken = $verificationTokken;
return $this;
}
/**
* Get verificationTokken
*
* #return string
*/
public function getVerificationTokken()
{
return $this->verificationTokken;
}
/**
* Set tokkenExpiryTime
*
* #param string $tokkenExpiryTime
*
* #return Users
*/
public function setTokkenExpiryTime($tokkenExpiryTime)
{
$this->tokkenExpiryTime = $tokkenExpiryTime;
return $this;
}
/**
* Get tokkenExpiryTime
*
* #return string
*/
public function getTokkenExpiryTime()
{
return $this->tokkenExpiryTime;
}
/**
* Set isTwoWayAuthEnabled
*
* #param integer $isTwoWayAuthEnabled
*
* #return Users
*/
public function setIsTwoWayAuthEnabled($isTwoWayAuthEnabled)
{
$this->isTwoWayAuthEnabled = $isTwoWayAuthEnabled;
return $this;
}
/**
* Get isTwoWayAuthEnabled
*
* #return integer
*/
public function getIsTwoWayAuthEnabled()
{
return $this->isTwoWayAuthEnabled;
}
/**
* Set verificationPin
*
* #param string $verificationPin
*
* #return Users
*/
public function setVerificationPin($verificationPin)
{
$this->verificationPin = $verificationPin;
return $this;
}
/**
* Get verificationPin
*
* #return string
*/
public function getVerificationPin()
{
return $this->verificationPin;
}
/**
* Set slug
*
* #param string $slug
*
* #return Users
*/
public function setSlug($slug)
{
$this->slug = $slug;
return $this;
}
/**
* Get slug
*
* #return string
*/
public function getSlug()
{
return $this->slug;
}
/**
* Set dateString
*
* #param string $dateString
*
* #return Users
*/
public function setDateString($dateString)
{
$this->dateString = $dateString;
return $this;
}
/**
* Get dateString
*
* #return string
*/
public function getDateString()
{
return $this->dateString;
}
/**
* Set dateTimeString
*
* #param string $dateTimeString
*
* #return Users
*/
public function setDateTimeString($dateTimeString)
{
$this->dateTimeString = $dateTimeString;
return $this;
}
/**
* Get dateTimeString
*
* #return string
*/
public function getDateTimeString()
{
return $this->dateTimeString;
}
/**
* Set isActive
*
* #param integer $isActive
*
* #return Users
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* #return integer
*/
public function getIsActive()
{
return $this->isActive;
}
/**
* Set isDeleted
*
* #param integer $isDeleted
*
* #return Users
*/
public function setIsDeleted($isDeleted)
{
$this->isDeleted = $isDeleted;
return $this;
}
/**
* Get isDeleted
*
* #return integer
*/
public function getIsDeleted()
{
return $this->isDeleted;
}
/**
* Set isEditable
*
* #param integer $isEditable
*
* #return Users
*/
public function setIsEditable($isEditable)
{
$this->isEditable = $isEditable;
return $this;
}
/**
* Get isEditable
*
* #return integer
*/
public function getIsEditable()
{
return $this->isEditable;
}
/**
* Set lastUpdatedOn
*
* #param string $lastUpdatedOn
*
* #return Users
*/
public function setLastUpdatedOn($lastUpdatedOn)
{
$this->lastUpdatedOn = $lastUpdatedOn;
return $this;
}
/**
* Get lastUpdatedOn
*
* #return string
*/
public function getLastUpdatedOn()
{
return $this->lastUpdatedOn;
}
/**
* Set schoolId
*
* #param integer $schoolId
*
* #return Users
*/
public function setSchoolId($schoolId)
{
$this->schoolId = $schoolId;
return $this;
}
/**
* Get schoolId
*
* #return integer
*/
public function getSchoolId()
{
return $this->schoolId;
}
/**
* Set updatedBy
*
* #param integer $updatedBy
*
* #return Users
*/
public function setUpdatedBy($updatedBy)
{
$this->updatedBy = $updatedBy;
return $this;
}
/**
* Get updatedBy
*
* #return integer
*/
public function getUpdatedBy()
{
return $this->updatedBy;
}
}
AcitivityLogs.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* ActivitLogs
*
* #ORM\Table(name="ms_activity_logs")
* #ORM\Entity
*/
class ActivitLogs
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var integer
*
* #ORM\Column(name="user_id", type="integer")
*
* #ORM\ManyToOne(targetEntity="Users")
* #ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
/**
* #var string
*
* #ORM\Column(name="activity_log", type="text")
*/
private $activityLog;
/**
* #var string
*
* #ORM\Column(name="user_agent", type="string", length=250)
*/
private $userAgent;
/**
* #var string
*
* #ORM\Column(name="os_platform", type="string", length=250)
*/
private $osPlatform;
/**
* #var string
*
* #ORM\Column(name="ip_address", type="string", length=250)
*/
private $ipAddress;
/**
* #var string
*
* #ORM\Column(name="referer", type="text")
*/
private $referer;
/**
* #var string
*
* #ORM\Column(name="date_string", type="string", length=50)
*/
private $dateString;
/**
* #var string
*
* #ORM\Column(name="date_time_string", type="string", length=50)
*/
private $dateTimeString;
/**
* #var integer
*
* #ORM\Column(name="is_active", type="integer")
*/
private $isActive;
/**
* #var integer
*
* #ORM\Column(name="is_deleted", type="integer")
*/
private $isDeleted;
/**
* #var integer
*
* #ORM\Column(name="is_editable", type="integer")
*/
private $isEditable;
/**
* #var string
*
* #ORM\Column(name="last_updated_on", type="string", length=50)
*/
private $lastUpdatedOn;
/**
* #var integer
*
* #ORM\Column(name="school_id", type="integer")
*/
private $schoolId;
/**
* #var integer
*
* #ORM\Column(name="updated_by", type="integer")
*/
private $updatedBy;
/**
* Get id
*
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set userId
*
* #param integer $userId
*
* #return ActivitLogs
*/
public function setUserId($userId)
{
$this->userId = $userId;
return $this;
}
/**
* Get userId
*
* #return integer
*/
public function getUserId()
{
return $this->userId;
}
/**
* Set activityLog
*
* #param string $activityLog
*
* #return ActivitLogs
*/
public function setActivityLog($activityLog)
{
$this->activityLog = $activityLog;
return $this;
}
/**
* Get activityLog
*
* #return string
*/
public function getActivityLog()
{
return $this->activityLog;
}
/**
* Set userAgent
*
* #param string $userAgent
*
* #return ActivitLogs
*/
public function setUserAgent($userAgent)
{
$this->userAgent = $userAgent;
return $this;
}
/**
* Get userAgent
*
* #return string
*/
public function getUserAgent()
{
return $this->userAgent;
}
/**
* Set osPlatform
*
* #param string $osPlatform
*
* #return ActivitLogs
*/
public function setOsPlatform($osPlatform)
{
$this->osPlatform = $osPlatform;
return $this;
}
/**
* Get osPlatform
*
* #return string
*/
public function getOsPlatform()
{
return $this->osPlatform;
}
/**
* Set ipAddress
*
* #param string $ipAddress
*
* #return ActivitLogs
*/
public function setIpAddress($ipAddress)
{
$this->ipAddress = $ipAddress;
return $this;
}
/**
* Get ipAddress
*
* #return string
*/
public function getIpAddress()
{
return $this->ipAddress;
}
/**
* Set referer
*
* #param string $referer
*
* #return ActivitLogs
*/
public function setReferer($referer)
{
$this->referer = $referer;
return $this;
}
/**
* Get referer
*
* #return string
*/
public function getReferer()
{
return $this->referer;
}
/**
* Set dateString
*
* #param string $dateString
*
* #return ActivitLogs
*/
public function setDateString($dateString)
{
$this->dateString = $dateString;
return $this;
}
/**
* Get dateString
*
* #return string
*/
public function getDateString()
{
return $this->dateString;
}
/**
* Set dateTimeString
*
* #param string $dateTimeString
*
* #return ActivitLogs
*/
public function setDateTimeString($dateTimeString)
{
$this->dateTimeString = $dateTimeString;
return $this;
}
/**
* Get dateTimeString
*
* #return string
*/
public function getDateTimeString()
{
return $this->dateTimeString;
}
/**
* Set isActive
*
* #param integer $isActive
*
* #return ActivitLogs
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* #return integer
*/
public function getIsActive()
{
return $this->isActive;
}
/**
* Set isDeleted
*
* #param integer $isDeleted
*
* #return ActivitLogs
*/
public function setIsDeleted($isDeleted)
{
$this->isDeleted = $isDeleted;
return $this;
}
/**
* Get isDeleted
*
* #return integer
*/
public function getIsDeleted()
{
return $this->isDeleted;
}
/**
* Set isEditable
*
* #param integer $isEditable
*
* #return ActivitLogs
*/
public function setIsEditable($isEditable)
{
$this->isEditable = $isEditable;
return $this;
}
/**
* Get isEditable
*
* #return integer
*/
public function getIsEditable()
{
return $this->isEditable;
}
/**
* Set lastUpdatedOn
*
* #param string $lastUpdatedOn
*
* #return ActivitLogs
*/
public function setLastUpdatedOn($lastUpdatedOn)
{
$this->lastUpdatedOn = $lastUpdatedOn;
return $this;
}
/**
* Get lastUpdatedOn
*
* #return string
*/
public function getLastUpdatedOn()
{
return $this->lastUpdatedOn;
}
/**
* Set schoolId
*
* #param integer $schoolId
*
* #return ActivitLogs
*/
public function setSchoolId($schoolId)
{
$this->schoolId = $schoolId;
return $this;
}
/**
* Get schoolId
*
* #return integer
*/
public function getSchoolId()
{
return $this->schoolId;
}
/**
* Set updatedBy
*
* #param integer $updatedBy
*
* #return ActivitLogs
*/
public function setUpdatedBy($updatedBy)
{
$this->updatedBy = $updatedBy;
return $this;
}
/**
* Get updatedBy
*
* #return integer
*/
public function getUpdatedBy()
{
return $this->updatedBy;
}
}
I have a simple ManyToOne Relationship between these two tables on userId field.
Here is the code with i m trying to add the data in to database with doctrine.
public function checkDatabaseAction(){
$user = new Users();
$user->setDateString(date('Y-m-d'))
->setDateTimeString(date('Y-m-d H:i:s'))
->setIsActive(1)
->setIsDeleted(0)
->setIsEditable(1)
->setIsTwoWayAuthEnabled(0)
->setLastUpdatedOn(date('Y-m-d H:i:s'))
->setSchoolId(1)
->setSlug('abc-123')
->setTokkenExpiryTime(date('Y-m-d'))
->setUpdatedBy(1)
->setUsername('ahmedali5530')
->setVerificationPin('1122')
->setVerificationTokken('hskajdhfkjlh435kh34k5jh435');
$log = new ActivitLogs();
$log->setActivityLog('A log')
->setDateString(date('Y-m-d'))
->setDateTimeString(date('Y-m-d H:i:s'))
->setIpAddress('192.168.1.16')
->setIsActive(1)
->setIsDeleted(0)
->setIsEditable(1)
->setLastUpdatedOn(date('Y-m-d H:i:s'))
->setOsPlatform('Windows 7')
->setReferer('http://localhost/symfony')
->setSchoolId(1)
->setUpdatedBy(1)
->setUserAgent('Chrome')
->setUserId($user);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->persist($log);
$em->flush();
$allocateCourses = $em->getRepository('AppBundle:AllocateCourses')->findBy(array('isActive'=>1));
return $this->render(':main:form.html.php',array(
'data' => $allocateCourses,
));
}
When I execute this code I received the error:-
An exception occurred while executing 'INSERT INTO ms_activity_logs (user_id, activity_log, user_agent, os_platform, ip_address, referer, date_string, date_time_string, is_active, is_deleted, is_editable, last_updated_on, school_id, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [{}, "A log", "Chrome", "Windows 7", "192.168.1.16", "http://localhost/symfony", "2015-12-22", "2015-12-22 16:53:55", 1, 0, 1, "2015-12-22 16:53:55", 1, 1]:
Catchable Fatal Error: Object of class AppBundle\Entity\Users could not be converted to string
Any suggestions how to fix this error.

Ok I got the answer.
I added the new private property in ActivityLogs.php and told Doctrine to generate the entity. Doctrine created getter and setters for that property. This fixed my problem.
Here is the code I added:
/**
* #ORM\ManyToOne(targetEntity="Users", inversedBy="ActivityLogs")
* #ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;

Related

ORM ManyToOne Unidirectional fetchAll Object array does not render in phtml Zend Framework 3

The application has built in ZF3. I have to entity with ManyToOne relationship using ORM. The issue is when i render through controller and and if fetch data via index it gives okay result but when i assign that to view and trying to render at phtml it throws an error/
/**
* Subscriptions
*
* #ORM\Table(name="subscriptions", indexes={#ORM\Index(name="CUST_ID", columns={"customer_id"}),#ORM\Index(name="SUB_TYPE_ID", columns={"subscription_type_id"})})
* #ORM\Entity
*/
class Subscriptions
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer", nullable=false)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* #var \Application\Entity\SubscriptionType
*
* #ORM\ManyToOne(targetEntity="Application\Entity\SubscriptionType")
* #ORM\JoinColumns({
* #ORM\JoinColumn(name="subscription_type_id", referencedColumnName="id")
* })
*/
protected $subscriptionType;
//set
public function setSubscriptionType(\Application\Entity\SubscriptionType $subscriptionType = null)
{
$this->subscriptionType = $subscriptionType;
return $this;
}
//get
public function getSubscriptionType(){
return $this->subscriptionType;
}
//other setter and getter....
}
Another Class
/**
* SubscriptionType
*
* #ORM\Table(name="subscription_type")
* #ORM\Entity
*/
class SubscriptionType
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer", nullable=false)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="description", type="text", length=65535, nullable=true)
*/
private $description;
/**
* Get id
*enter code here
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set description
*
* #param string $description
*
* #return SubscriptionType
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
}
Now at controller i have wrote...
//some initiations
class AdminController extends AbstractActionController
{
//other initiations including __construct....
public function usersubscriptionsAction(){
$this->subscriptions = $this->entityManager->getRepository(Subscriptions::class)->findAll();
/*
foreach($this->subscriptions as $subscription){
//if i am checking with this it gives proper output
echo $subscription->getSubscriptionType()->getDescription();
die();
}
*/
return new ViewModel(
array(
"subscriptions" => $this->subscriptions
)
);
}
}
///i have phtml file
<?php foreach ($subscriptions as $subscription): ?>
//below line throwing an error
<?php echo $subscription->getSubscriptionType()->getDescription(); ?>
<?php endforeach; ?>
when i run it throw an erro message
Call to a member function getDescription() on null
You've got the relation mapping incorrect. Corrected the property annotation below:
/**
* #var \Application\Entity\SubscriptionType
*
* #ORM\ManyToOne(targetEntity="Application\Entity\SubscriptionType")
* #ORM\JoinColumn(name="subscription_type_id", referencedColumnName="id")
*/
protected $subscriptionType;
You had
/**
* #var \Application\Entity\SubscriptionType
*
* #ORM\ManyToOne(targetEntity="Application\Entity\SubscriptionType")
* #ORM\JoinColumns({
* #ORM\JoinColumn(name="subscription_type_id", referencedColumnName="id")
* })
*/
protected $subscriptionType;
The #ORM\JoinColumns is used for when you have a join with multiple columns, please see the docs. Though, the most common usage of JoinColumns is for a JoinTable.

Type conversion error from LifecycleEventArgs

I have no idea for this. I'm a beginner of symfony3.
code
/**
* Set createdAt
* #ORM\PrePersist()
* #param \DateTime $createdAt
*
* #return Book
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* #return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set updateAt
*
* #param \DateTime $updateAt
*
* #return Book
*/
public function setUpdateAt($updateAt)
{
$this->updateAt = $updateAt;
return $this;
}
/**
* Get updateAt
*
* #return \DateTime
*/
public function getUpdateAt()
{
return $this->updateAt;
}
/**
* #ORM\PrePersist()
*/
public function PrePersist() {
if ($this->getCreatedAt() == null) {
$this->setCreatedAt(new \DateTime('now'));
}
$this->setUpdateAt(new \DateTime('now'));
}
/**
* #ORM\PreUpdate()
*/
public function PreUpdate() {
$this->setUpdateAt(new \DateTime('now'));
}
it gives an error report as below :
Error
Could not convert PHP value of type 'Doctrine\ORM\Event\LifecycleEventArgs' to type 'datetime'. Expected one of the following types: null, DateTime
Help me to figure it out.

Doctrine insert table using joined table entities as reference

I have spent the last day trying to find a solution to a problem that I am having and now turn to you to see if you can offer some advice.
Ill start with the table and then the entity
I have three tables,
table_a
table_b
table_c
each table row has a unique id
table_c contains a reference to table_a_id and to table_b_id
This reference should be unidirectional as table_a and table_b have no need to ever know of table_c's existence.
Also, there is no cascading, if an id from table_a or table_b does not exist, then table_c should not be able to insert a row.
ok, now for entities. (I am going to cut out irrelevant code to keep it short)
Entity A defines table_a
/**
* A
* #ORM\Entity(repositoryClass="Sample\Bundle\MyBundle\Entity\ARepository")
* #ORM\Table("table_a")
*/
class A
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* Get id
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
* #param string $name
* #return A
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
* #return string
*/
public function getName()
{
return $this->name;
}
}
Entity B defines table_b
/**
* B
*
* #ORM\Table("table_b")
* #ORM\Entity
*/
class B
{
/**
* #var integer
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* Get id
*
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
* #param string $name
* #return B
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
* #return string
*/
public function getName()
{
return $this->name;
}
}
Entity C maps table_c and has many to one relationships with table_a and table_b
/**
* C
*
* #ORM\Table("table_c")
* #ORM\Entity(repositoryClass="Sample\Bundle\MyBundle\Entity\CRepository")
*/
class PricesAverage
{
/**
* #var integer
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var \Sample\Bundle\MyBundle\Entity\A
* #ORM\ManyToOne(targetEntity="Sample\Bundle\MyBundle\Entity\A", inversedBy="id")
* #ORM\JoinColumn(name="a_id",unique=false)
*/
private $a;
/**
* #var \Sample\Bundle\MyBundle\Entity\B
* #ORM\ManyToOne(targetEntity="Sample\Bundle\MyBundle\Entity\B", inversedBy="id")
* #ORM\JoinColumn(name="b_id",unique=false)
*/
private $b;
/**
* Get id
*
* #return integer
*/
public function getId()
{
return $this->id;
}
/**
* #return A
*/
public function getA() {
return $this->a;
}
/**
* #param A $a
* #return $this
*/
public function setA($a) {
$this->a = $a;
return $this;
}
/**
* #return B
*/
public function getB() {
return $this->b;
}
/**
* #param B $b
* #return $this
*/
public function setB($b) {
$this->b = $b;
return $this;
}
}
No what I do is the following. (this is just simplified logic but it is the same process)
$days = 5;
$aCollection = {get collection of A's)
for($i = 0,$i<$days,$i++){
foreach($aCollection as $a){
$b = {get a single b}
$c = new C();
$c->setA($a)
->setB($b);
{use doctrine to persist and flush $c}
}
}
What is happening is that on the first insert the id for a is correct, but on the second insert, doctrine seems to think that competitor is a new entity and tries to persist and create a new id.
I have dumped my collection without activating the doctrine insert and I see that the id on A is correct, I then do the same thing after doctrine and find that doctrine is somehow clearing away my object.
How can I resolve this?
UPDATE:
I resolved this issue.
The problem that I was having is that the related entity was being removed from the entity manager after I did my batch insert.
The was a result of doing clear after every flush.
I moved clear to the end of the process so I flush as much as I need but only clear once.

Symfony2 onetoone relationship

I am developing an application using symfony2 and using orm.yml files to mapp the entities into the database. The problem comes when trying to create a relation for two entities that share a onetoone relationship (Markagarria.php and GalderaPaketea.php). When running php app/console doctrine:schema:update --force it shows the next message: Nothing to update - your database is already in sync with the current entity metadata.
This is the code for the entities:
<?php
namespace Anotatzailea\AnotatzaileaBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Anotatzailea\AnotatzaileaBundle\Entity\Markagarria
*
* #ORM\Table(name="Markagarria")
* #ORM\Entity
* #ORM\HasLifecycleCallbacks
*/
class Markagarria
{
/**
* #var integer $MarkId
*
* #ORM\Column(name="MarkId", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $MarkId;
/**
* #ORM\ManyToOne(targetEntity="Dokumentua", inversedBy="Markagarriak")
* #ORM\JoinColumn(name="DokId", referencedColumnName="DokId")
*/
protected $Dokumentua;
/**
* #ORM\oneToOne(targetEntity="GalderaPaketea", mappedBy="Markagarria")
*/
private $GalderaPaketea;
/**
* Get MarkId
*
* #return integer
*/
public function getMarkId()
{
return $this->MarkId;
}
/**
* Set GalderaPaketea
*
* #param Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea $galderaPaketea
*/
public function setGalderaPaketea(\Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea $galderaPaketea)
{
$this->GalderaPaketea = $galderaPaketea;
}
/**
* Get GalderaPaketea
*
* #return Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea
*/
public function getGalderaPaketea()
{
return $this->GalderaPaketea;
}
/**
* Set Dokumentua
*
* #param Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua
*/
public function setDokumentua(\Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua)
{
$this->Dokumentua = $dokumentua;
}
/**
* Get Dokumentua
*
* #return Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua
*/
public function getDokumentua()
{
return $this->Dokumentua;
}
}
<?php
namespace Anotatzailea\AnotatzaileaBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea
*
* #ORM\Table(name="GalderaPaketea")
* #ORM\Entity
*/
class GalderaPaketea
{
/**
* #var integer $GalPakId
*
* #ORM\Column(name="GalPakId", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $GalPakId;
/**
* #var integer $BalidatzeEginak
*
* #ORM\Column(name="BalidatzeEginak", type="integer")
*/
private $BalidatzeEginak;
/**
* #var integer $InterpretatzeEginak
*
* #ORM\Column(name="InterpretatzeEginak", type="integer")
*/
private $InterpretatzeEginak;
/**
* #var boolean $PaketeEgoera
*
* #ORM\Column(name="PaketeEgoera", type="boolean")
*/
private $PaketeEgoera;
/**
* #ORM\oneToOne(targetEntity="Markagarria", mappedBy="GalderaPaketea")
* #ORM\JoinColumn(name="MarkId", referencedColumnName="MarkId")
*/
private $Markagarria;
/**
* Get GalPakId
*
* #return integer
*/
public function getGalPakId()
{
return $this->GalPakId;
}
/**
* Set BalidatzeEginak
*
* #param integer $balidatzeEginak
*/
public function setBalidatzeEginak($balidatzeEginak)
{
$this->BalidatzeEginak = $balidatzeEginak;
}
/**
* Get BalidatzeEginak
*
* #return integer
*/
public function getBalidatzeEginak()
{
return $this->BalidatzeEginak;
}
/**
* Set InterpretatzeEginak
*
* #param integer $interpretatzeEginak
*/
public function setInterpretatzeEginak($interpretatzeEginak)
{
$this->InterpretatzeEginak = $interpretatzeEginak;
}
/**
* Get InterpretatzeEginak
*
* #return integer
*/
public function getInterpretatzeEginak()
{
return $this->InterpretatzeEginak;
}
/**
* Set PaketeEgoera
*
* #param boolean $paketeEgoera
*/
public function setPaketeEgoera($paketeEgoera)
{
$this->PaketeEgoera = $paketeEgoera;
}
/**
* Get PaketeEgoera
*
* #return boolean
*/
public function getPaketeEgoera()
{
return $this->PaketeEgoera;
}
/**
* Set Markagarria
*
* #param Anotatzailea\AnotatzaileaBundle\Entity\Markagarria $markagarria
*/
public function setMarkagarria(\Anotatzailea\AnotatzaileaBundle\Entity\Markagarria $markagarria)
{
$this->Markagarria = $markagarria;
}
/**
* Get Markagarria
*
* #return Anotatzailea\AnotatzaileaBundle\Entity\Markagarria
*/
public function getMarkagarria()
{
return $this->Markagarria;
}
}
And the orm.yml files have the following content:
Anotatzailea\AnotatzaileaBundle\Entity\Markagarria:
type: entity
table: Markagarria
fields:
MarkId:
type: integer
id: true
precision: 0
scale: 0
unique: false
nullable: false
generator:
strategy: IDENTITY
manyToOne:
Dokumentua:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua
cascade: { }
mappedBy: null
inversedBy: Markagarriak
joinColumns:
DokId:
referencedColumnName: DokId
orphanRemoval: false
oneToOne:
GalderaPaketea:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea
cascade: { }
mappedBy: Markagarria
lifecycleCallbacks: { }
Anotatzailea\AnotatzaileaBundle\Entity\GalderaPaketea:
type: entity
table: GalderaPaketea
fields:
GalPakId:
type: integer
id: true
precision: 0
scale: 0
unique: false
nullable: false
generator:
strategy: IDENTITY
BalidatzeEginak:
type: integer
precision: 0
scale: 0
unique: false
nullable: false
InterpretatzeEginak:
type: integer
precision: 0
scale: 0
unique: false
nullable: false
PaketeEgoera:
type: boolean
precision: 0
scale: 0
unique: false
nullable: false
oneToOne:
Markagarria:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Markagarria
cascade: { }
mappedBy: GalderaPaketea
joinColumn:
name: MarkId
referencedColumnName: MarkId
lifecycleCallbacks: { }
It looks like your entry in the the entity GalderaPaketea should be:
/**
* #ORM\oneToOne(targetEntity="Markagarria", inversedBy="GalderaPaketea")
* #ORM\JoinColumn(name="MarkId", referencedColumnName="MarkId")
*/
Neither entity is claiming ownership so no db update is performed.
Check out Doctrine Association mappings - OneToOne Bi-directional
I'm new to Symfony myself and I found this document very helpful.

Symfony2 mapping onetomany manytone

I am developing an application using symfony2 and using orm.yml files for mapping the entities into the database. The problem comes when trying to create the database tables for two entities that share a onetomany relationship (Anotatzea.php and Dokumentua.php). When running php app/console doctrine:schema:update --force it shows the next error
[RuntimeException]
The autoloader expected class "Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea" to be defined in file "/var/www/Symfony/app/../src/Anotatzailea/AnotatzaileaBundle/Entity/Anotatzea.php". The file was found but the class was not in it, the class name or namespace probably has a typo.
The entities have the following code:
<?php
namespace Anotatzailea\AnotatzaileaBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua
*
* #ORM\Table(name="Dokumentua")
* #ORM\Entity
*/
class Dokumentua
{
/**
* #var integer $DokId
*
* #ORM\Column(name="DokId", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $DokId;
/**
* #var string $Izenburua
*
* #ORM\Column(name="Izenburua", type="string", length=30)
*/
private $Izenburua;
/**
* #var string $Egilea
*
* #ORM\Column(name="Egilea", type="string", length=40)
*/
private $Egilea;
/**
* #var date $ErregistroData
*
* #ORM\Column(name="ErregistroData", type="date")
*/
private $ErregistroData;
/**
* #var boolean $DokEgoera
*
* #ORM\Column(name="DokEgoera", type="boolean")
*/
private $DokEgoera;
/**
* #ORM\OneToMany(targetEntity="Anotatzea", mappedBy="Dokumentua")
*/
protected $Anotatzeak;
/**
* Get DokId
*
* #return integer
*/
public function getDokId()
{
return $this->DokId;
}
/**
* Set Izenburua
*
* #param string $izenburua
*/
public function setIzenburua($izenburua)
{
$this->Izenburua = $izenburua;
}
/**
* Get Izenburua
*
* #return string
*/
public function getIzenburua()
{
return $this->Izenburua;
}
/**
* Set Egilea
*
* #param string $egilea
*/
public function setEgilea($egilea)
{
$this->Egilea = $egilea;
}
/**
* Get Egilea
*
* #return string
*/
public function getEgilea()
{
return $this->Egilea;
}
/**
* Set ErregistroData
*
* #param date $erregistroData
*/
public function setErregistroData($erregistroData)
{
$this->ErregistroData = $erregistroData;
}
/**
* Get ErregistroData
*
* #return date
*/
public function getErregistroData()
{
return $this->ErregistroData;
}
/**
* Set DokEgoera
*
* #param boolean $dokEgoera
*/
public function setDokEgoera($dokEgoera)
{
$this->DokEgoera = $dokEgoera;
}
/**
* Get DokEgoera
*
* #return boolean
*/
public function getDokEgoera()
{
return $this->DokEgoera;
}
public function __construct()
{
$this->Anotatzeak = new ArrayCollection();
}
}
<?php
namespace Anotatzailea\AnotatzaileaBundle\Anotatzea;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea
*
* #ORM\Table(name="Anotatzea")
* #ORM\Entity
* #ORM\HasLifecycleCallbacks
*/
class Anotatzea
{
/**
* #var integer $AnotId
*
* #ORM\Column(name="AnotId", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $AnotId;
/**
* #ORM\ManyToOne(targetEntity="Dokumentua", inversedBy="Anotatzeak")
* #ORM\JoinColumn(name="DokId", referencedColumnName="DokId")
*/
protected $Dokumentua;
/**
* Get AnotId
*
* #return integer
*/
public function getAnotId()
{
return $this->AnotId;
}
/**
* Set Dokumentua
*
* #param Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua
*/
public function setDokumentua(\Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua $dokumentua)
{
$this->Dokumentua = $dokumentua;
}
/**
* Get Dokumentua
*
* #return Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua
*/
public function getDokumentua()
{
return $this->Dokumentua;
}
/**
* #ORM\prePersist
*/
public function setUpdatedValue()
{
// Add your code here
}
}
And the orm.yml files:
Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua:
type: entity
table: Dokumentua
fields:
DokId:
type: integer
id: true
precision: 0
scale: 0
unique: false
nullable: false
generator:
strategy: IDENTITY
Izenburua:
type: string
length: 30
precision: 0
scale: 0
unique: false
nullable: false
Egilea:
type: string
length: 40
precision: 0
scale: 0
unique: false
nullable: false
ErregistroData:
type: date
precision: 0
scale: 0
unique: false
nullable: false
DokEgoera:
type: boolean
precision: 0
scale: 0
unique: false
nullable: false
OneToMany:
Anotatzeak:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea
cascade: { }
mappedBy: Dokumentua
inversedBy: null
orphanRemoval: false
cascade: ["persist", "merge","remove"]
orderBy: null
lifecycleCallbacks: { }
Anotatzailea\AnotatzaileaBundle\Entity\Anotatzea:
type: entity
table: Anotatzea
fields:
AnotId:
type: integer
id: true
precision: 0
scale: 0
unique: false
nullable: false
generator:
strategy: IDENTITY
manyToOne:
Dokumentua:
targetEntity: Anotatzailea\AnotatzaileaBundle\Entity\Dokumentua
cascade: { }
mappedBy: null
inversedBy: Anotatzeak
joinColumns:
DokId:
referencedColumnName: DokId
orphanRemoval: false
lifecycleCallbacks: { }
The namespace name in the second entity file is wrong.
Replace:
namespace Anotatzailea\AnotatzaileaBundle\Anotatzea;
with:
namespace Anotatzailea\AnotatzaileaBundle\Entity;