i have an entity called "FosUser" :
<?php
namespace techeventBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* FosUser
*
* #ORM\Table(name="fos_user", uniqueConstraints={#ORM\UniqueConstraint(name="UNIQ_957A6479A0D96FBF", columns={"email_canonical"}), #ORM\UniqueConstraint(name="UNIQ_957A647992FC23A8", columns={"username_canonical"}), #ORM\UniqueConstraint(name="UNIQ_957A6479C05FB297", columns={"confirmation_token"})}, indexes={#ORM\Index(name="IDX_957A647914013572", columns={"copon_id"})})
* #ORM\Entity
*/
class FosUser
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer", nullable=false)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="username", type="string", length=180, nullable=true)
*/
private $username;
/**
* #var string
*
* #ORM\Column(name="username_canonical", type="string", length=180, nullable=true)
*/
private $usernameCanonical;
/**
* #var string
*
* #ORM\Column(name="email", type="string", length=180, nullable=false)
*/
private $email;
/**
* #var string
*
* #ORM\Column(name="email_canonical", type="string", length=180, nullable=true)
*/
private $emailCanonical;
/**
* #var boolean
*
* #ORM\Column(name="enabled", type="boolean", nullable=true)
*/
private $enabled;
/**
* #var string
*
* #ORM\Column(name="salt", type="string", length=255, nullable=true)
*/
private $salt;
/**
* #var string
*
* #ORM\Column(name="password", type="string", length=255, nullable=false)
*/
private $password;
/**
* #var \DateTime
*
* #ORM\Column(name="last_login", type="datetime", nullable=true)
*/
private $lastLogin;
/**
* #var string
*
* #ORM\Column(name="confirmation_token", type="string", length=180, nullable=true)
*/
private $confirmationToken;
/**
* #var \DateTime
*
* #ORM\Column(name="password_requested_at", type="datetime", nullable=true)
*/
private $passwordRequestedAt;
/**
* #var array
*
* #ORM\Column(name="roles", type="array", nullable=true)
*/
private $roles;
/**
* #var string
*
* #ORM\Column(name="nom", type="string", length=255, nullable=false)
*/
private $nom;
/**
* #var string
*
* #ORM\Column(name="prenom", type="string", length=255, nullable=false)
*/
private $prenom;
/**
* #var string
*
* #ORM\Column(name="tel", type="string", length=30, nullable=true)
*/
private $tel;
/**
* #var integer
*
* #ORM\Column(name="age", type="integer", nullable=false)
*/
private $age;
/**
* #var string
*
* #ORM\Column(name="sexe", type="string", length=255, nullable=true)
*/
private $sexe;
/**
* #var string
*
* #ORM\Column(name="fonction", type="string", length=255, nullable=true)
*/
private $fonction;
/**
* #var string
*
* #ORM\Column(name="address", type="string", length=255, nullable=true)
*/
private $address;
/**
* #var string
*
* #ORM\Column(name="categorie", type="string", length=255, nullable=true)
*/
private $categorie;
/**
* #var string
*
* #ORM\Column(name="type", type="string", length=255, nullable=true)
*/
private $type;
/**
* #var string
*
* #ORM\Column(name="description", type="string", length=255, nullable=true)
*/
private $description;
/**
* #var string
*
* #ORM\Column(name="role", type="string", length=255, nullable=true)
*/
private $role;
/**
* #var \Coupon
*
* #ORM\ManyToOne(targetEntity="Coupon")
* #ORM\JoinColumns({
* #ORM\JoinColumn(name="copon_id", referencedColumnName="id")
* })
*/
private $copon;
}
i have deleted fields in this entity and changed the default value of fields to null ('nullable = true') like this :
<?php
namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* FosUser
*
* #ORM\Table(name="fos_user", uniqueConstraints={#ORM\UniqueConstraint(name="UNIQ_957A6479A0D96FBF", columns={"email_canonical"}), #ORM\UniqueConstraint(name="UNIQ_957A647992FC23A8", columns={"username_canonical"}), #ORM\UniqueConstraint(name="UNIQ_957A6479C05FB297", columns={"confirmation_token"})}, indexes={#ORM\Index(name="IDX_957A647914013572", columns={"copon_id"})})
* #ORM\Entity
*/
class FosUser extends BaseUser
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer", nullable=false)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* #var string
*
* #ORM\Column(name="nom", type="string", length=255, nullable=true)
*/
protected $nom;
/**
* #var string
*
* #ORM\Column(name="prenom", type="string", length=255, nullable=true)
*/
protected $prenom;
/**
* #var string
*
* #ORM\Column(name="tel", type="string", length=30, nullable=true)
*/
protected $tel;
/**
* #var integer
*
* #ORM\Column(name="age", type="integer", nullable=false)
*/
protected $age;
/**
* #var string
*
* #ORM\Column(name="sexe", type="string", length=255, nullable=true)
*/
protected $sexe;
/**
* #var string
*
* #ORM\Column(name="fonction", type="string", length=255, nullable=true)
*/
protected $fonction;
/**
* #var string
*
* #ORM\Column(name="address", type="string", length=255, nullable=true)
*/
protected $address;
/**
* #var string
*
* #ORM\Column(name="categorie", type="string", length=255, nullable=true)
*/
protected $categorie;
/**
* #var string
*
* #ORM\Column(name="type", type="string", length=255, nullable=true)
*/
protected $type;
/**
* #var string
*
* #ORM\Column(name="description", type="string", length=255, nullable=true)
*/
protected $description;
/**
* #var string
*
* #ORM\Column(name="role", type="string", length=255, nullable=true)
*/
protected $role;
/**
* #var \Coupon
*
* #ORM\ManyToOne(targetEntity="Coupon")
* #ORM\JoinColumns({
* #ORM\JoinColumn(name="copon_id", referencedColumnName="id")
* })
*/
protected $copon;
public function __construct()
{
parent::__construct();
// your own logic
}
}
i had those errors after updating the database schema :
In AbstractMySQLDriver.php line 112:
An exception occurred while executing 'ALTER TABLE fos_user CHANGE
username username VARCHAR(180) NOT NULL, CHANGE username_canonical
username_canonic al VARCHAR(180) NOT NULL, CHANGE email_canonical
email_canonical VARCHAR(18 0) NOT NULL, CHANGE enabled enabled
TINYINT(1) NOT NULL, CHANGE roles roles LONGTEXT NOT NULL COMMENT
'(DC2Type:array)', CHANGE nom nom VARCHAR(255) D EFAULT NULL, CHANGE
prenom prenom VARCHAR(255) DEFAULT NULL':
SQLSTATE[22004]: Null value not allowed: 1138 Utilisation incorrecte
de la valeur NULL
In PDOConnection.php line 106:
SQLSTATE[22004]: Null value not allowed: 1138 Utilisation incorrecte
de la valeur NULL
In PDOConnection.php line 104:
SQLSTATE[22004]: Null value not allowed: 1138 Utilisation incorrecte
de la valeur NULL
Your code is right!
Previously you haven't used FOUser class, your fos_user table have already username, emailCanonical, etc ...
Then when you extend FOSUser and update database schema, your current entity doesn't accept null value for username, etc .. (It's FOSUser logic)
Solution, you have to delete your fos_user table before updating the database schema
Related
I'm using doctrine to generate the entities from database in command line
doctrine orm:convert-mapping --force --from-database annotation ./Api/Entity
The php class is created correctly but when i try to use the repository to load the entity from the database
$decompte=$entityManager->getRepository(Decompte::class)->find(31);
I'm getting this exception
Class "entity\Decompte" is not a valid entity or mapped super class.
and please find above the entire code of the class entity\Decompte
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* Decompte
*
* #ORM\Table(name="decompte", indexes={#ORM\Index(name="N°D", columns={"ID"})})
* #ORM\Entity
*/
class Decompte
{
/**
* #var int
*
* #ORM\Column(name="ID", type="integer", nullable=false)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* #var int|null
*
* #ORM\Column(name="NPRIXD", type="integer", nullable=true)
*/
private $nprixd;
/**
* #var string|null
*
* #ORM\Column(name="DESIGNATIOND", type="string", length=43, nullable=true)
*/
private $designationd;
/**
* #var string|null
*
* #ORM\Column(name="UNITED", type="string", length=2, nullable=true)
*/
private $united;
/**
* #var int|null
*
* #ORM\Column(name="QTED", type="integer", nullable=true)
*/
private $qted;
/**
* #var int|null
*
* #ORM\Column(name="PRIXHTD", type="integer", nullable=true)
*/
private $prixhtd;
/**
* #var string|null
*
* #ORM\Column(name="DECOMPTED", type="string", length=2, nullable=true)
*/
private $decompted;
/**
* #var int|null
*
* #ORM\Column(name="TOTALD", type="integer", nullable=true)
*/
private $totald;
/**
* #var string|null
*
* #ORM\Column(name="QMARCHE", type="string", length=11, nullable=true)
*/
private $qmarche;
/**
* #var string|null
*
* #ORM\Column(name="QDECOMPTE", type="string", length=5, nullable=true)
*/
private $qdecompte;
/**
* #var int|null
*
* #ORM\Column(name="SMARCHE", type="integer", nullable=true)
*/
private $smarche;
/**
* #var string|null
*
* #ORM\Column(name="SDECOMPTE", type="string", length=6, nullable=true)
*/
private $sdecompte;
/**
* #var int|null
*
* #ORM\Column(name="NDMR", type="integer", nullable=true)
*/
private $ndmr;
/**
* #var string|null
*
* #ORM\Column(name="RESTE", type="string", length=11, nullable=true)
*/
private $reste;
/**
* #var string|null
*
* #ORM\Column(name="RESTEF", type="string", length=11, nullable=true)
*/
private $restef;
}
when trying to debug this issue, i found out that the Annotation Driver reader's cache is empty
i've added somme "echo" in the AnnotationDriver::loadMetaDataForClass
echo 'allClassName'.$this->getAllClassNames();
echo 'allPaths'.$this->getPaths();
returns an empty array
$classAnnotations = $this->reader->getClassAnnotations($class);
is also empty
thank you very much for you help
I'm going to working in a Admin Backend to a WebPage with Symfony 2.2.8 and Javier Eguiluz's EasyAdminBundle 1.16.12 (last version). I installed the bundle following the instructions in GitHub page, and I have also created a couple of test entities (Users and Engagementes).
Well, my trouble is that the text type in the edit template not working, they are empty and without label, otherwise the entity can be edited correctly.
User:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* #ORM\Table(name="User")
* #ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User
{
/**
* #var int
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="name", type="string", length=50, nullable=true)
*/
private $name;
/**
* #var string
*
* #ORM\Column(name="surname", type="string", length=255, nullable=true)
*/
private $surname;
/**
* #var string
*
* #ORM\Column(name="username", type="string", length=50, unique=true)
*/
private $username;
/**
* #var string
*
* #ORM\Column(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* #var string
*
* #ORM\Column(name="password", type="string", length=255)
*/
private $password;
/**
* #var string
*
* #ORM\Column(name="role", type="string", length=50)
*/
private $role;
// getter and setter [...]
Engagement:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Engagement
*
* #ORM\Table(name="Engagement")
* #ORM\Entity(repositoryClass="AppBundle\Repository\EngagementRepository")
*/
class Engagement
{
/**
* #var int
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="code", type="string", length=20, unique=true)
*/
private $code;
/**
* #var string
*
* #ORM\Column(name="owner", type="string", length=255)
*/
private $owner;
/**
* #var int
*
* #ORM\Column(name="phone", type="integer", nullable=true)
*/
private $phone;
/**
* #var string
*
* #ORM\Column(name="incident", type="string", length=255)
*/
private $incident;
/**
* #var string
*
* #ORM\Column(name="brand", type="string", length=50, nullable=true)
*/
private $brand;
/**
* #var string
*
* #ORM\Column(name="model", type="string", length=255, nullable=true)
*/
private $model;
/**
* #var string
*
* #ORM\Column(name="repairer", type="string", length=255, nullable=true)
*/
private $repairer;
/**
* #var float
*
* #ORM\Column(name="cost", type="float", nullable=true)
*/
private $cost;
/**
* #var float
*
* #ORM\Column(name="advance", type="float", nullable=true)
*/
private $advance;
/**
* #var \DateTime
*
* #ORM\Column(name="start_date", type="datetime")
*/
private $startDate;
/**
* #var string
*
* #ORM\Column(name="status", type="string", length=50)
*/
private $status;
/**
* #var string
*
* #ORM\Column(name="comment", type="string", length=255, nullable=true)
*/
private $comment;
// setters and getters [...]
Config.yml:
# [...]
easy_admin:
entities:
- AppBundle\Entity\User
- AppBundle\Entity\Engagement
And I get it with EasyAdminBundle:
P.S.: I'm sorry if I made mistakes, English is not my native language.
Can someone tell me if it's possible to serialize an entity that have relations ?
json_encode already works but my object looks like this :
{
"id": 1,
"lot": 32,
"num": "533987",
"date_modification": {
"date": "2015-02-17 14:24:52",
"timezone_type": 3,
"timezone": "Europe/Paris"
},
"customer": {
"id": 1,
"lastname": "DUFRESNE",
"firstname": "CHRISTOPHE",
}
}
But i would like to serialize data withotu sub objects. in fact like this :
{
"id": 1,
"lot": 32,
"num": "533987",
"date_modification": "2015-02-17",
"customer": "DUFRESNE CHRISTOPHE",
}
}
So i checked the doc : http://symfony.com/doc/current/components/serializer.html
But i can't see if it's possible to works with relations like ManyToMany, etc and how to do it ?
Here is my Entity :
/**
* Subscription (BS)
*
* #ORM\Table(name="subscription")
* #ORM\Entity(repositoryClass="Jcd\LiteyearBundle\Entity\SubscriptionRepository")
* #ORM\HasLifecycleCallbacks
*/
class Subscription {
/**
* #var integer
*
* #ORM\Column(name="id", type="integer")
* #ORM\Id
* #ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* #var string
*
* #ORM\Column(name="lot", type="smallint")
*/
private $lot;
/**
* #var string
* #ORM\Column(name="num", type="string", length=9)
*/
private $num;
/**
* #var \DateTime
* #ORM\Column(name="date_creation", type="datetime", nullable=true)
*/
private $date_creation;
/**
* #var \DateTime
* #ORM\Column(name="date_modification", type="datetime", nullable=true)
*/
private $date_modification;
/**
* #var \DateTime
* #ORM\Column(name="date_completeness", type="datetime", nullable=true)
*/
private $date_completeness;
/**
* #var \DateTime
* #ORM\Column(name="date_reception", type="datetime", nullable=true)
*/
private $date_reception;
/**
* #var \DateTime
* #ORM\Column(name="date_signature", type="datetime", nullable=true)
*/
private $date_signature;
/**
* #var \DateTime
* #ORM\Column(name="date_entry", type="datetime", nullable=true)
*/
private $date_entry;
/**
* #var \Integer
* #ORM\Column(name="statement", type="integer", nullable=true)
*/
private $statement; // Releve du compteur
/**
* #var \Integer
* #ORM\Column(name="statement_kind", type="integer", nullable=true)
*/
private $statement_kind; // Personne qui a relevé le compteur
/**
* #var \Integer
* #ORM\Column(name="car", type="integer", nullable=true)
*/
private $car; // Consommation annuelle de reference
/**
* #var boolean
* #ORM\Column(name="pro", type="boolean", options={"default" = false}, nullable=true)
*/
private $pro;
/**
* #ORM\ManyToOne(targetEntity="Jcd\LiteyearBundle\Entity\User", cascade={"persist"}, inversedBy="adv_subscriptions")
* #ORM\JoinColumn(name="adv_id", referencedColumnName="id", nullable=true)
*/
private $adv;
/**
* #ORM\ManyToOne(targetEntity="Jcd\LiteyearBundle\Entity\User", cascade={"persist"}, inversedBy="vendor_subscriptions")
* #ORM\JoinColumn(name="vendor_id", referencedColumnName="id", nullable=true)
*/
private $vendor;
/**
* #var \Integer
* #ORM\Column(name="provider", type="integer")
*/
private $provider;
/**
* #var \Integer
* #ORM\Column(name="state", type="integer")
*/
private $state;
/**
* #var \Integer
* #ORM\Column(name="payment", type="integer")
*/
private $payment;
/**
* #var \Integer
* #ORM\Column(name="billing", type="integer")
*/
private $billing;
/**
* #var string
* #ORM\Column(name="comment", type="text", nullable=true)
*/
private $comment;
/**
* #var float
* #ORM\Column(name="wage", type="float", nullable=true)
*/
private $wage; // Anciennement Rem
/**
* #var float
* #ORM\Column(name="com", type="float", nullable=true)
*/
private $com; // Anciennement Commission
/**
* #var string
* #ORM\Column(name="offer", type="text", nullable=true)
*/
private $offer; // Anciennement Prix fixe
/**
* #var \Integer
* #ORM\Column(name="mail_kind", type="integer", nullable=true)
*/
private $mail_kind; //Anciennement Mail
/**
* #ORM\OneToMany(targetEntity="SubscriptionTrack", cascade={"persist", "remove"}, mappedBy="subscription")
*/
private $tracks;
/**
* #ORM\ManyToMany(targetEntity="SubscriptionSalary", cascade={"persist"}, mappedBy="subscriptions")
**/
private $salaries;
/**
* #ORM\OneToOne(targetEntity="Jcd\LiteyearBundle\Entity\Customer")
* #ORM\JoinColumn(name="customer_id", referencedColumnName="id")
**/
private $customer;
Thank you for you answer !
The easiest way to achieve what you want is to use JMSSerializerBundle that has many features that you might want to use.
Give it a try: http://jmsyst.com/bundles/JMSSerializerBundle
When looking at the User entity, you can see its a manytomany self referencing relation. A user has many friends who are users themselves. How do I make this exact same search in within a user's friends? (in this query, I'm only looking for users who fill those conditions, but I would like to perform it in a $user friends)
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select( 'USER', '' )
->from( 'Entity\User', 'USER' )
->innerJoin( 'USER.eventNotified' )
->where(
$qb->expr()->andX(
$qb->expr()->gt( 'USER.latitude', ':minLat' ),
$qb->expr()->lt( 'USER.latitude', ':maxLat' ),
$qb->expr()->gt( 'USER.longitude', ':minLng' ),
$qb->expr()->lt( 'USER.longitude', ':maxLng' ),
$qb->expr()->eq( 'USER.available', 1 )
)
);
Here is the User entity (only properties for clarity):
class User
{
/**
* #var integer
*
* #ORM\Column(name="id", type="integer", nullable=false, unique=true)
* #ORM\Id
* #ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* #var integer
*
* #ORM\Column(name="fb_id", type="bigint", nullable=false, unique=true)
*/
private $fb_id;
/**
* #var string
*
* #ORM\Column(name="firstname", type="string", length=100, nullable=false, unique=false)
*/
private $first_name;
/**
* #var string
*
* #ORM\Column(name="lastname", type="string", length=100, nullable=true, unique=false)
*/
private $last_name;
/**
* #var string
*
* #ORM\Column(name="email", type="string", length=255, nullable=true, unique=true)
*/
private $email;
/**
* #var integer
*
* #ORM\Column(name="notation", type="integer", nullable=true, unique=true)
*/
private $notation;
/**
* Bidirectional - Many users have Many favorite comments (OWNING SIDE)
*
* #var \Doctrine\Common\Collections\Collection
*
* #ORM\ManyToMany(targetEntity="Entity\Category", inversedBy="userInterests")
*/
private $interests;
/**
* #var \Doctrine\Common\Collections\Collection
*
* #ORM\ManyToMany(targetEntity="Entity\User", cascade={"persist"})
* #ORM\JoinTable(name="friends",
* joinColumns={#ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={#ORM\JoinColumn(name="friend_user_id", referencedColumnName="id")}
* )
**/
private $friends;
/**
* #var \Doctrine\Common\Collections\Collection
*
* #ORM\OneToMany(targetEntity="Entity\Request", mappedBy="user", cascade={"remove"}, orphanRemoval=true)
* #ORM\JoinColumn(nullable=true)
*/
private $requests;
/**
* #var \Doctrine\Common\Collections\Collection
*
* #ORM\OneToMany(targetEntity="Entity\Request", mappedBy="friend", cascade={"remove"}, orphanRemoval=true)
* #ORM\JoinColumn(nullable=true)
*/
private $notifications;
/**
* Bidirectional - Many users have notified they want to go to different events (OWNING SIDE)
*
* #var \Doctrine\Common\Collections\Collection
*
* #ORM\ManyToMany(targetEntity="Entity\Event", inversedBy="userNotified", cascade={"persist"})
*/
private $eventNotified;
/**
* #var integer
*
* #ORM\Column(name="age", type="integer", length=3, nullable=true, unique=false)
*/
private $age;
/**
* #var string
*
* #ORM\Column(name="description", type="text", nullable=true, unique=false)
*/
private $description;
/**
* #var string
*
* #ORM\Column(name="picture", type="string", length=300, nullable=true, unique=false)
*/
private $picture;
/**
* #var string
*
* #ORM\Column(name="genre", type="string", length=10, nullable=true, unique=false)
*/
private $genre;
/**
* #var boolean
*
* #ORM\Column(name="isregistered", type="boolean", length=1, nullable=false, unique=false)
*/
private $registered;
/**
* #var string
*
* #ORM\Column(name="latitude", type="decimal", length=64, precision=25, scale=20, nullable=true, unique=false)
*/
private $latitude;
/**
* #var string
*
* #ORM\Column(name="longitude", type="decimal", length=64, precision=25, scale=20, nullable=true, unique=false)
*/
private $longitude;
/**
* #var \Entity\Security_Key
*
* #ORM\OneToOne(targetEntity="Entity\Security_Key", cascade={"persist","remove"}, orphanRemoval=true)
* #ORM\JoinColumns({
* #ORM\JoinColumn(name="private_key_id", referencedColumnName="id", unique=true, onDelete="SET NULL")
* })
*/
private $private_key;
/**
* #var boolean
*
* #ORM\Column(name="isavailable", type="boolean", length=1, nullable=false, unique=false)
*/
private $available = 0;
/**
* Constructor
*/
public function __construct()
{
$this->friends = new \Doctrine\Common\Collections\ArrayCollection();
}
Thank you
You can add additional conditions to a join, by using the WITH keyword.
$qb->select( 'USER' )
->from( 'Entity\User', 'USER' )
->where( 'USER.id = :userId' )
->leftJoin('USER.friends', 'f', 'WITH', $qb->expr()->andX(
$qb->expr()->gt( 'f.latitude', ':minLat' ),
$qb->expr()->lt( 'f.latitude', ':maxLat' ),
$qb->expr()->gt( 'f.longitude', ':minLng' ),
$qb->expr()->lt( 'f.longitude', ':maxLng' ),
$qb->expr()->eq( 'f.available', 1 )
)
)
Edited to show where to put the userId.
I have two entities:
Warehouses
id | name
---------------------
1 | Warehouse 1
2 | Warehouse 2
Items
id | warehouse_id | name
--------------------------------------
1 | 1 | Item 1
2 | 2 | Item 2
I am wondering how to set the value of warehouse_id to Null if I remove "warehouse 1" from the warehouse table. In all actually I need warehouse_id to be set to NULL on all tables in my db if I remove "warehouse 1".
In my "Items" entity, for example, I have this set up and it does not seem to do anything for me when I remove "warehouse 1"
/**
* #ORM\ManyToOne(targetEntity="WIC\WarehouseBundle\Entity\Warehouse", inversedBy="purchaseOrderLineItemLocation")
* #ORM\JoinColumn(name="warehouse_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* #Common\Versioned
*/
protected $warehouse;
Here is my full warehouse entity
Is there something in here that I need to set?
/**
* #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)
* #Common\Versioned
* #Assert\NotBlank(message="Location Name cannot be blank.")
*/
private $name;
/**
* #var string $description
*
* #Common\Versioned
* #ORM\Column(name="description", type="text")
*/
protected $description;
/**
* #var string
* #ORM\Column(name="address", type="string", length=255)
* #Common\Versioned
* #Assert\NotBlank(message="Address cannot be blank.")
*/
private $address;
/**
* #var string
* #ORM\Column(name="address2", type="string", length=255, nullable=true)
* #Common\Versioned
*/
private $address2;
/**
* #var string
* #ORM\Column(name="city", type="string", length=255)
* #Common\Versioned
* #Assert\NotBlank(message="City cannot be blank.")
*/
private $city;
/**
* #var string
* #ORM\Column(name="state", type="string", length=255)
* #Common\Versioned
* #Assert\NotBlank(message="State cannot be blank.")
*/
private $state;
/**
* #var string
* #ORM\Column(name="zip", type="string", length=255)
* #Gedmo\Versioned
* #Assert\NotBlank(message="Zip cannot be blank.")
*/
private $zip;
/**
* #var string
* #ORM\Column(name="country", type="string", length=255, nullable=true)
* #Common\Versioned
*/
private $country;
/**
* #var string
* #ORM\Column(name="phone", type="string", length=255, nullable=true)
* #Common\Versioned
*/
private $phone;
/**
* #var string
* #ORM\Column(name="email", type="string", length=255, nullable=true)
* #Common\Versioned
*/
private $email;
/**
* #var string
* #ORM\Column(name="fax", type="string", length=255, nullable=true)
* #Common\Versioned
*/
private $fax;
/**
* #ORM\OneToMany(targetEntity="WIC\InventoryLocationBundle\Entity\InventoryLocation", mappedBy="inventoryLocation")
*/
protected $inventoryLocations;
/**
* #ORM\ManyToOne(targetEntity="WIC\UserBundle\Entity\User")
* #ORM\JoinColumn(name="created_by", referencedColumnName="id")
* #Common\Blameable(on="create")
*/
private $createdBy;
/**
* #ORM\ManyToOne(targetEntity="WIC\UserBundle\Entity\User")
* #ORM\JoinColumn(name="updated_by", referencedColumnName="id")
* #Common\Blameable(on="update")
*/
private $updatedBy;
/**
* #ORM\ManyToOne(targetEntity="WIC\AccountBundle\Entity\Account", inversedBy="warehouses")
* #ORM\JoinColumn(name="account_id", referencedColumnName="id", nullable=false)
* #Common\Versioned
* #Common\Blameable(on="create")
*/
protected $account;
/**
* #var datetime $created
*
* #Common\Timestampable(on="create")
* #ORM\Column(type="datetime")
*/
private $created;
/**
* #var datetime $updated
*
* #Common\Timestampable(on="update")
* #ORM\Column(type="datetime", nullable=true)
*/
private $updated;
/**
* #ORM\Column(name="deletedAt", type="datetime", nullable=true)
*/
private $deletedAt;
public function __construct()
{
$this->inventoryLocations = new ArrayCollection();
}
You are probably better of keeping it as restrict on delete, then use a doctrine event subscriber to set the reference to null.
http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
This would give you more control over the process, as well as keeping you aware of what your application is doing. Try not to let the framework act on its own when it comes to destruction of data, otherwise you will start creating holes in your application that become difficult to diagnose.