Hi Paul, thank you for your patience. That tutorial is a bit incomplete. It supposes some steps that are not explicitly mentioned. These steps are necessary to execute that piece of code in the example.
*Step 1: making, storing and retrieving a new user* - to make a new User: $user = new User(); - to persist that new User in the database: $em->persist($user); $em->flush(); - you can now retrieve that user from the database with find( ). The $id is auto-incremented. I would also add a $name to the user entity (with a getter and setter), so you can more easily see if everything goes well. Idem I would add a $content or $body or something like that to the comment entity. You could read some more about defining your entities in the "getting started" tutorial, after the initial setup: http://docs.doctrine-project.org/en/latest/tutorials/getting-started.html#adding-bug-and-user-entities *Step 2: Collections in the constructor. * A User has some collections: $commentsRead and $commentsAuthored. A Comment has a collection of $userFavorites. Those collections should be defined in the constructor: // User constructor public function __construct() { $this->commentsRead = new ArrayCollection(); $this->commentsAuthored = new ArrayCollection(); } // Comment constructor public function __construct() { $this->userFavorites = new ArrayCollection(); } Even if a User is new, you can now add a Comment to its commentsRead and commentsAuthored collections. After those first 2 steps you can now execute that code in the example. *Step 3: not necessary, but good practice to obey to Demeter's Law* In the example the add( ) method of the ArrayCollection is used to add something to the collections. That is possible, but considered bad practice: better to only use direct methods of an object (aka "only talk to your direct neighbours"). In order to do so, you should add methods to add and remove to those collections: addFavoriteComment($comment), removeFavoriteComment($comment) etc. See other tutorials, like the getting started mentioned above. *Step 4: improving the example* I personally don't like the example with $firstComment very much: someone's first comment is not something you normally would define in a domain model. The tutorial would be better by leaving out such an unrealistic property. I'll try to find some time to rewrite that tutorial a little bit, in order to make it more clear. Hope this helps. *- Herman* On Thursday, 6 February 2014 18:55:38 UTC+1, paul kendal wrote: > > > > Hi > > i am new to doctrine and trying to learn from the tutorial here > doctrine-project > : 9.1. Association Example > Entities<http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html>. > i followed the example of the tutorial and created two classes: Users and > Comment. (there was a slight problem with the coding of the classes but > this was resolved in another post; in summary; i had to . > > my two classes are listed here: a gist account: > <https://gist.github.com/anonymous/8848863> > > i am now trying following the second part of the tutorial in which the > author *Establishing Associations* . i.e: > <?php > $user = $em->find(’User’, $userId); > // unidirectional many to many > $comment = $em->find(’Comment’, $readCommentId); > $user->getReadComments()->add($comment); > $em->flush(); > // unidirectional many to one > $myFirstComment = new Comment(); > $user->setFirstComment($myFirstComment); > $em->persist($myFirstComment); > $em->flush(); > > > my problem however is that when i try to do the above code, i now get this > message: > > *Fatal error: Call to a member function getReadComments() on a non-object * > > i suspect that the problem occurred because there are no values in the > comments table etc. but i dont know how to put the values into the table. > i.e it cannot be done manually beucase there is a constraint on the tables. > > i would really appricaite the amendment of the code above to populate all > the table with intial values. > > sorry to ask this question but i am still trying to get to grips with how > doctrine works. > > warm regards > > Paul > -- 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.
