Yes, that looks like it will work.
You could improve a bit on:
- the names of the variables. For instance $userIUser could better be
just called $user
- no need for a $userIId-field in the UserIdentity-entity
- the @var is now having the name of the table as type, instead of the
classname of the entity. This is only for docblock-reference, not a
Doctrine annotation (hence I was wron before when i put @ORM\var)
On Thursday, 27 February 2014 10:20:49 UTC+1, João Carlos Santa Ana wrote:
>
> use Doctrine\ORM\Mapping as ORM;
>
> /**
> * User
> *
> * @ORM\Table(name="USUARIOS")
> * @ORM\Entity
> * @ORM\Entity(repositoryClass="Rangos\Entity\UserRepository")
> */
> class User {
>
> /**
> * @var integer $userId
> *
> * @ORM\Column(name="USER_ID", type="integer", nullable=false)
> * @ORM\Id
> */
> private $userId;
>
>
> /**
> * @var \USUARIOS_IDENTIDADE
> * @ORM\OneToOne(targetEntity="Rangos\Entity\UserIdentity")
> * @ORM\JoinColumns({
> * @ORM\JoinColumn(name="USER_ID", referencedColumnName="USER_I_USER")
> * })
> */
> private $userIdentity;
> }
>
>
>
>
>
>
>
> /**
> * UserIdentity
> *
> * @ORM\Table(name="USUARIOS_IDENTIDADE")
> * @ORM\Entity
> * @ORM\Entity(repositoryClass="Rangos\Entity\UserIdentityRepository")
> */
> class UserIdentity {
>
> /**
> * @var integer $userIId
> *
> * @ORM\Column(name="USER_I_ID", type="integer", nullable=false)
> * @ORM\Id
> * @ORM\GeneratedValue(strategy="IDENTITY")
> */
> private $userIId;
>
>
> /**
> * @var \USUARIOS
> * @ORM\GeneratedValue
> * @ORM\Column(name="USER_I_USER", type="integer", nullable=false)
> * @ORM\OneToOne(targetEntity="Rangos\Entity\User",
> inversedBy="userIdentity")
> * @ORM\JoinColumns({
> * @ORM\JoinColumn(name="USER_I_USER", referencedColumnName="USER_ID")
> * })
> */
> private $userIUser;
>
> }
>
>
>
> $query = $this->getEntityManager()->createQueryBuilder();
> $query->select('u', 'i')
> ->from('Rangos\Entity\User', 'u')
> ->leftJoin("u.userIdentity", 'i');
> $result = $query->getQuery()->execute();
>
>
>
>
>
>
>
>
>
>
> Em quinta-feira, 27 de fevereiro de 2014 06h15min23s UTC-3, João Carlos
> Santa Ana escreveu:
>>
>> I think I solved the problem. I'll post the solution I found if it is not
>> right or something is missing please tell.
>>
>> class User {
>>
>> /**
>> * @var integer $userId
>> *
>> * @ORM\Column(name="USER_ID", type="integer", nullable=false)
>> * @ORM\Id
>> */
>> private $userId;
>>
>>
>> /**
>> * @var \USUARIOS_IDENTIDADE
>> * @ORM\OneToOne(targetEntity="Rangos\Entity\UserIdentity")
>> * @ORM\JoinColumns({
>> * @ORM\JoinColumn(name="USER_ID", referencedColumnName="USER_I_USER")
>> * })
>> */
>> private $userIdentity;
>> }
>>
>> class UserIdentity {
>>
>> /**
>> * @var integer $userIId
>> *
>> * @ORM\Column(name="USER_I_ID", type="integer", nullable=false)
>> * @ORM\Id
>> * @ORM\GeneratedValue(strategy="IDENTITY")
>> */
>> private $userIId;
>>
>>
>> /**
>> * @var \USUARIOS
>> * @ORM\GeneratedValue
>> * @ORM\Column(name="USER_I_USER", type="integer", nullable=false)
>> * @ORM\OneToOne(targetEntity="Rangos\Entity\User",
>> inversedBy="userIdentity")
>> * @ORM\JoinColumns({
>> * @ORM\JoinColumn(name="USER_I_USER", referencedColumnName="USER_ID")
>> * })
>> */
>> private $userIUser;
>> }
>>
>> $query = $this->getEntityManager()->createQueryBuilder();
>> $query->select('u', 'i')
>> ->from('Rangos\Entity\User', 'u')
>> ->leftJoin("u.userIdentity", 'i');
>> $result = $query->getQuery()->execute();
>>
>>
>>
>> Agradeço pela ajuda.
>>
>>
>> Em quinta-feira, 27 de fevereiro de 2014 04h45min40s UTC-3, Herman Peeren
>> escreveu:
>>>
>>> On Wednesday, 26 February 2014 23:55:55 UTC+1, João Carlos Santa Ana
>>> wrote:
>>> can someone tell if this correct.
>>>
>>> No, sorry, it is not correct yet. Please reread the documentation and
>>> try to understand *every *line of code you write.
>>> It is good that you limited the problem to just one relation to start
>>> with, the UserIdentity, and left the UserAddress out for a moment. Once you
>>> get the principle you can add other objects to this User-aggregate.
>>>
>>> You are trying to make a User-entity that 'has a' UserIdentity; a
>>> OneToOne association. Because it is a bidirectional relationship, you must
>>> have some $userIdentity-field in your User. That field is lacking now. In
>>> the annotation of that field you define the OneToOne-relationship. At the
>>> other side, in the UserIdentity-entity you have a $user-field. Not a
>>> userIId: that is irrelevant for the identity and only necessary as a
>>> foreign key in the table. In the object UserIdentity you don't have a
>>> userID, but a user. I would describe that relationship as: a UserIdentity
>>> 'belongs to' a User. Or: a UserIdentity 'gives more information about' a
>>> User.
>>>
>>> The $user you have in your UserIdentity is of the type User. Hence:
>>> @ORM\var
>>> \User, not @var \USARIOS (there is no \USARIOS-class). But you can also
>>> leave that entire line out, as you are allready defining a targetEntity in
>>> the association, so we know what type it is.
>>>
>>> BTW:I would take another name for User*Identity*, for it is a bit
>>> confusing name, as it looks like UserID. You could for instance rename it
>>> to UserProfile, UserDetails, UserInformation or maybe something more
>>> informative and precise. This is THE chance to give it a good name, you'll
>>> get clearer code every time you use those attributes later in your
>>> application.
>>>
>>>
>>>
>>>
>>>
>>> On Wednesday, 26 February 2014 23:55:55 UTC+1, João Carlos Santa Ana
>>> wrote:
>>>>
>>>> The closest I came to a possible solution can someone tell if this
>>>> correct. If yes how to query from there?
>>>>
>>>> use Doctrine\ORM\Mapping as ORM;
>>>>
>>>> /**
>>>> * User
>>>> *
>>>> * @ORM\Table(name="USUARIOS")
>>>> * @ORM\Entity
>>>> * @ORM\Entity(repositoryClass="Rangos\Entity\UserRepository")
>>>> */
>>>> class User {
>>>>
>>>> /**
>>>> * @var integer $userId
>>>> *
>>>> * @ORM\Column(name="USER_ID", type="integer", nullable=false)
>>>> * @ORM\Id
>>>> * @ORM\GeneratedValue(strategy="IDENTITY")
>>>> * @ORM\OneToOne(targetEntity="Rangos\Entity\UserIdentity")
>>>> * @ORM\JoinColumns({
>>>> * @ORM\JoinColumn(name="USER_ID",
>>>> referencedColumnName="USER_I_USER")
>>>> * })
>>>> */
>>>> private $userId;
>>>>
>>>> /**
>>>> * @var integer $userEmp
>>>> *
>>>> * @ORM\Column(name="USER_EMP", type="integer", nullable=false)
>>>> */
>>>> private $userEmp;
>>>> }
>>>>
>>>> use Doctrine\ORM\Mapping as ORM;
>>>>
>>>> /**
>>>> * UserIdentity
>>>> *
>>>> * @ORM\Table(name="USUARIOS_IDENTIDADE")
>>>> * @ORM\Entity
>>>> * @ORM\Entity(repositoryClass="Rangos\Entity\UserIdentityRepository")
>>>> */
>>>> class UserIdentity {
>>>>
>>>> /**
>>>> * @var integer $userIId
>>>> *
>>>> * @ORM\Column(name="USER_I_ID", type="integer", nullable=false)
>>>> * @ORM\Id
>>>> * @ORM\GeneratedValue(strategy="IDENTITY")
>>>> */
>>>> private $userIId;
>>>>
>>>>
>>>> /**
>>>> * @var \USUARIOS
>>>> * @ORM\GeneratedValue
>>>> * @ORM\OneToOne(targetEntity="Rangos\Entity\User",
>>>> inversedBy="userIdentity")
>>>> * @ORM\JoinColumns({
>>>> * @ORM\JoinColumn(name="USER_I_USER",
>>>> referencedColumnName="USER_ID")
>>>> * })
>>>> */
>>>> private $userIUser;
>>>>
>>>> /**
>>>> * @var string $userINome
>>>> *
>>>> * @ORM\Column(name="USER_I_NOME", type="string", length=40,
>>>> nullable=false)
>>>> */
>>>> private $userINome;
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> Em quarta-feira, 26 de fevereiro de 2014 19h13min45s UTC-3, João Carlos
>>>> Santa Ana escreveu:
>>>>>
>>>>> class User {
>>>>>
>>>>> /**
>>>>> * @var integer $userId
>>>>> *
>>>>> * @ORM\Column(name="USER_ID", type="integer", nullable=false)
>>>>> * @ORM\Id
>>>>> * @ORM\GeneratedValue(strategy="IDENTITY")
>>>>> */
>>>>> private $userId;
>>>>>
>>>>> /**
>>>>> * @ORM\OneToOne(targetEntity="Rangos\Entity\UserIdentity")
>>>>> * @ORM\JoinColumns({
>>>>> * @ORM\JoinColumn(name="userIdentity",
>>>>> referencedColumnName="USER_I_USER")
>>>>> * })
>>>>> */
>>>>> private $userIdentity;
>>>>> }
>>>>>
>>>>> class UserIdentity {
>>>>>
>>>>> /**
>>>>> * @var integer $userIId
>>>>> *
>>>>> * @ORM\Column(name="USER_I_ID", type="integer", nullable=false)
>>>>> * @ORM\Id
>>>>> * @ORM\GeneratedValue(strategy="IDENTITY")
>>>>> */
>>>>> private $userIId;
>>>>>
>>>>>
>>>>> /**
>>>>> * @var \USUARIOS
>>>>> * @ORM\GeneratedValue
>>>>> * @ORM\OneToOne(targetEntity="Rangos\Entity\User",
>>>>> inversedBy="USER_ID")
>>>>> * @ORM\JoinColumns({
>>>>> * @ORM\JoinColumn(name="USER_I_USER",
>>>>> referencedColumnName="USER_ID")
>>>>> * })
>>>>> */
>>>>> private $userIUser;
>>>>>
>>>>> }
>>>>>
>>>>> PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column
>>>>> 't0.userIdentity' in 'field list'
>>>>>
>>>>> Em quarta-feira, 26 de fevereiro de 2014 18h08min07s UTC-3, Marco
>>>>> Pivetta escreveu:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 26 February 2014 21:53, João Carlos Santa Ana <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> I do not believe to be 4 days to solve this :/.
>>>>>>> keep getting an exception:
>>>>>>>
>>>>>>> AnnotationException: [Semantical Error] The annotation "@OneToOne"
>>>>>>> in property Rangos\Entity\User::$userIdentity was never imported. Did
>>>>>>> you
>>>>>>> maybe forget to add a "use" statement for this annotation?
>>>>>>>
>>>>>>>
>>>>>> You need to prefix the annotation with "ORM\", so it should be
>>>>>> "@ORM\OneToOne"
>>>>>>
>>>>>> Read your exception messages carefully ;-)
>>>>>>
>>>>>> Marco Pivetta
>>>>>>
>>>>>> http://twitter.com/Ocramius
>>>>>>
>>>>>> http://ocramius.github.com/
>>>>>>
>>>>>
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/groups/opt_out.