Symfony2 mapping onetomany manytone - orm

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;

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.

Problems with Doctrine mapping in Symfony

I have been programming a project in the Symfony 3 using the Doctrine ORM. I have main entity called 'Race', which contains some fields and relations to another entities like 'RaceRelationToType', 'RaceRelationToOrganizer' and so on - you can see it in the picture of the database schema bellow. (Only for information, 'RaceRelationTo*' entities are entities which prevents change of original data.)
The problem: The problem becames when I fetch data from database using $this->em->getRepository('AppBundle:Race')->findAll();. Data in database are stored correctly, but If I fetch them, they have wrong data type. raceRelationToOrganizer variable should be of data type RaceRelationToOrganizer, not RaceRelationToSeason and so on.
Everything had worked right until I reset a database. When I insert new race to cleared database, id of raceRelationToSeason is 1, raceRelationToType is 1, raceRelationToOrganizer is 1 ans so on. Problems occured after reset of database (and reset of auto increment).
If ids of all relations are different, than it works OK. Magic? Error? Does anybody know what to do with it? Can you find some problem in files bellow? I have been trying to solve it for hours. Contents of important files are bellow.
I use yaml configuration files for ORM mapping. Race.orm.yml contains:
AppBundle\Entity\Race:
type: entity
table: race
id:
id:
type: integer
generator:
strategy: AUTO
fields:
registrationNumberOfRace:
column: registration_number_of_race
type: integer
length: 4
nullable: false
dateFrom:
column: date_from
type: date
nullable: false
dateTo:
column: date_to
type: date
nullable: false
manyToOne:
raceRelationToSeason:
targetEntity: AppBundle\Entity\RaceRelationToSeason
joinColumn:
name: race_relation_to_season
referencedColumnName: id
onDelete: RESTRICT
nullable: false
fetch: EAGER
cascade: [ persist,remove ]
raceRelationToType:
targetEntity: AppBundle\Entity\RaceRelationToType
joinColumn:
name: race_relation_to_type
referencedColumnName: id
onDelete: RESTRICT
nullable: false
fetch: EAGER
cascade: [ persist,remove ]
raceRelationToOrganizer:
targetEntity: AppBundle\Entity\RaceRelationToOrganizer
joinColumn:
name: race_relation_to_organizer
referencedColumnName: id
onDelete: RESTRICT
nullable: false
fetch: EAGER
cascade: [ persist,remove ]
raceRelationToVenue:
targetEntity: AppBundle\Entity\RaceRelationToVenue
joinColumn:
name: race_relation_to_venue
referencedColumnName: id
onDelete: RESTRICT
nullable: false
fetch: EAGER
cascade: [ persist,remove ]
Entity Race.php contains:
<?php
namespace AppBundle\Entity;
/**
* Class Race
* #package AppBundle\Entity
*/
class Race
{
/**
* #var integer Id of the race
*/
protected $id;
/**
* #var SeasonOfRace
*/
protected $seasonOfRace;
/**
* #var RaceRelationToSeason
*/
protected $raceRelationToSeason;
/**
* #var TypeOfRace
*/
protected $typeOfRace;
/**
* #var RaceRelationToType
*/
protected $raceRelationToType;
/**
* #var integer Registration number of the race which depend on the type of race
*/
protected $registrationNumberOfRace;
/**
* #var OrganizerOfRace
*/
protected $organizerOfRace;
/**
* #var RaceRelationToOrganizer
*/
protected $raceRelationToOrganizer;
/**
* #var VenueOfRace
*/
protected $venueOfRace;
/**
* #var RaceRelationToVenue
*/
protected $raceRelationToVenue;
/**
* #var \DateTime
*/
protected $dateFrom;
/**
* #var \DateTime
*/
protected $dateTo;
/**
* Race constructor.
*/
public function __construct()
{
$this->dateFrom = $this->dateTo = new \DateTime();
}
/**
* #return int
*/
public function getId()
{
return $this->id;
}
/**
* #param $id
* #return $this
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* #return SeasonOfRace
*/
public function getSeasonOfRace()
{
if ($this->raceRelationToSeason) {
if ($this->raceRelationToSeason->getOriginal()) {
$this->seasonOfRace = $this->raceRelationToSeason->getOriginal();
return $this->seasonOfRace;
} else {
return $this->seasonOfRace;
}
} else {
return $this->seasonOfRace;
}
}
/**
* #param SeasonOfRace $seasonOfRace
* #return Race
*/
public function setSeasonOfRace(SeasonOfRace $seasonOfRace)
{
$this->seasonOfRace = $seasonOfRace;
if ($this->seasonOfRace) {
if ($this->raceRelationToSeason) {
$this->raceRelationToSeason->setLabel($this->seasonOfRace->getLabel());
$this->raceRelationToSeason->setShortLabel($this->seasonOfRace->getShortLabel());
$this->raceRelationToSeason->setOriginal($this->seasonOfRace);
} else {
$this->raceRelationToSeason = new RaceRelationToSeason();
$this->raceRelationToSeason->setLabel($this->seasonOfRace->getLabel());
$this->raceRelationToSeason->setShortLabel($this->seasonOfRace->getShortLabel());
$this->raceRelationToSeason->setOriginal($this->seasonOfRace);
}
}
return $this;
}
/**
* #return RaceRelationToSeason
*/
public function getRaceRelationToSeason()
{
return $this->raceRelationToSeason;
}
/**
* #param RaceRelationToSeason $raceRelationToSeason
* #return Race
*/
public function setRaceRelationToSeason(RaceRelationToSeason $raceRelationToSeason)
{
$this->raceRelationToSeason = $raceRelationToSeason;
return $this;
}
/**
* #return TypeOfRace
*/
public function getTypeOfRace()
{
if ($this->raceRelationToType) {
if ($this->raceRelationToType->getOriginal()) {
$this->typeOfRace = $this->raceRelationToType->getOriginal();
return $this->typeOfRace;
} else {
return $this->typeOfRace;
}
} else {
return $this->typeOfRace;
}
}
/**
* #param TypeOfRace $typeOfRace
* #return Race
*/
public function setTypeOfRace(TypeOfRace $typeOfRace)
{
$this->typeOfRace = $typeOfRace;
if ($this->typeOfRace) {
if ($this->raceRelationToType) {
$this->raceRelationToType->setLabel($this->typeOfRace->getLabel());
$this->raceRelationToType->setShortLabel($this->typeOfRace->getShortLabel());
$this->raceRelationToType->setOriginal($this->typeOfRace);
} else {
$this->raceRelationToType = new RaceRelationToType();
$this->raceRelationToType->setLabel($this->typeOfRace->getLabel());
$this->raceRelationToType->setShortLabel($this->typeOfRace->getShortLabel());
$this->raceRelationToType->setOriginal($this->typeOfRace);
}
}
return $this;
}
/**
* #return RaceRelationToType
*/
public function getRaceRelationToType()
{
return $this->raceRelationToType;
}
/**
* #param RaceRelationToType $raceRelationToType
* #return Race
*/
public function setRaceRelationToType(RaceRelationToType $raceRelationToType)
{
$this->raceRelationToType = $raceRelationToType;
return $this;
}
/**
* #return int
*/
public function getRegistrationNumberOfRace()
{
return $this->registrationNumberOfRace;
}
/**
* #param $registrationNumberOfRace
* #return Race
*/
public function setRegistrationNumberOfRace($registrationNumberOfRace)
{
$this->registrationNumberOfRace = $registrationNumberOfRace;
return $this;
}
/**
* #return VenueOfRace
*/
public function getVenueOfRace()
{
if ($this->raceRelationToVenue) {
if ($this->raceRelationToVenue->getOriginal()) {
$this->venueOfRace = $this->raceRelationToVenue->getOriginal();
return $this->venueOfRace;
} else {
return $this->venueOfRace;
}
} else {
return $this->venueOfRace;
}
}
/**
* #param VenueOfRace $venueOfRace
* #return Race
*/
public function setVenueOfRace(VenueOfRace $venueOfRace)
{
$this->venueOfRace = $venueOfRace;
if ($this->venueOfRace) {
if ($this->raceRelationToVenue) {
$this->raceRelationToVenue->setLabel($this->venueOfRace->getLabel());
$this->raceRelationToVenue->setShortLabel($this->venueOfRace->getShortLabel());
$this->raceRelationToVenue->setOriginal($this->venueOfRace);
} else {
$this->raceRelationToVenue = new RaceRelationToVenue();
$this->raceRelationToVenue->setLabel($this->venueOfRace->getLabel());
$this->raceRelationToVenue->setShortLabel($this->venueOfRace->getShortLabel());
$this->raceRelationToVenue->setOriginal($this->venueOfRace);
}
}
return $this;
}
/**
* #return RaceRelationToVenue
*/
public function getRaceRelationToVenue()
{
return $this->raceRelationToVenue;
}
/**
* #param RaceRelationToVenue $raceRelationToVenue
* #return Race
*/
public function setRaceRelationToVenue(RaceRelationToVenue $raceRelationToVenue)
{
$this->raceRelationToVenue = $raceRelationToVenue;
return $this;
}
/**
* #return OrganizerOfRace
*/
public function getOrganizerOfRace()
{
if ($this->raceRelationToOrganizer) {
if ($this->raceRelationToOrganizer->getOriginal()) {
$this->organizerOfRace = $this->raceRelationToOrganizer->getOriginal();
return $this->organizerOfRace;
} else {
return $this->organizerOfRace;
}
} else {
return $this->organizerOfRace;
}
}
/**
* #param OrganizerOfRace $organizerOfRace
* #return Race
*/
public function setOrganizerOfRace(OrganizerOfRace $organizerOfRace)
{
$this->organizerOfRace = $organizerOfRace;
if ($this->organizerOfRace) {
if ($this->raceRelationToOrganizer) {
$this->raceRelationToOrganizer->setLabel($this->organizerOfRace->getLabel());
$this->raceRelationToOrganizer->setShortLabel($this->organizerOfRace->getShortLabel());
$this->raceRelationToOrganizer->setOriginal($this->organizerOfRace);
} else {
$this->raceRelationToOrganizer = new RaceRelationToOrganizer();
$this->raceRelationToOrganizer->setLabel($this->organizerOfRace->getLabel());
$this->raceRelationToOrganizer->setShortLabel($this->organizerOfRace->getShortLabel());
$this->raceRelationToOrganizer->setOriginal($this->organizerOfRace);
}
}
return $this;
}
/**
* #return RaceRelationToOrganizer
*/
public function getRaceRelationToOrganizer()
{
return $this->raceRelationToOrganizer;
}
/**
* #param RaceRelationToOrganizer $raceRelationToOrganizer
* #return Race
*/
public function setRaceRelationToOrganizer(RaceRelationToOrganizer $raceRelationToOrganizer)
{
$this->raceRelationToOrganizer = $raceRelationToOrganizer;
return $this;
}
/**
* #return \DateTime
*/
public function getDateFrom()
{
return $this->dateFrom;
}
/**
* #param \DateTime $dateFrom
* #return $this
*/
public function setDateFrom(\DateTime $dateFrom)
{
$this->dateFrom = $dateFrom;
return $this;
}
/**
* #return \DateTime
*/
public function getDateTo()
{
return $this->dateTo;
}
/**
* #param \DateTime $dateTo
*/
public function setDateTo(\DateTime $dateTo)
{
$this->dateTo = $dateTo;
}
}
I solved it exactly after 23 hours, it was my fault. I want to say sorry to all who have spent their time with trying to help me.
As you can see in the database schema above, there is the table RaceRelationToType that is table between table called Race and table called TypeOfRace. This table is here because when you remove original data from TypeOfRace, data are still stored in a copy in RaceRelationToType+ - it is because of archiving data. It is same with another tables beggining with RaceRelationToXXX.
Mistake was in RaceRelationToOrganizer.php entity. I had extended RaceRelationToOrganizer entity with VenueOfRace entity instead of OrganizerOfRace entity. I don't know why, but It had worked before, but not after reset of database.
So there was no error shown, but Doctrine didn't know what to do with it (fields in all this between-tables are identical) and it mapped random data types. So that's all.
Thank you and sorry!

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

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;

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.