Finally I was able to finish wiki and I found my answers, just one answer,
if someone answers just this one, then I am fine and ready to go....


I am trying to insert a new Order row with doctrine, in Order entity I have
clientId property that is ManyToOne to Client entity, because each client
may have several orders.
When I try to persist/flush a new Order, I cannot set a value just by
$this->clientId = 1;
But if I set mapping and functions below then I can add an order with
clientId with:
$client = $em->find('Entities\Client', 1);
 if ($client === null) {
     echo "No client found.\n";
     exit(1);
 }
 $order = new Entities\Order;
 $order->setClient($client);
 $order->setFields($_POST);
 $em->persist($order);
 $em->flush();

Now my question is that if this is the only way to insert a new order?
Isn't it possible to simply set a clientId to add a new order?

Below is my mapping/functions I said above. and it works fine as I said, I
am asking if there is no easier way to set clientId to add a new order
without calling client entity before?
>From here
https://doctrine-orm.readthedocs.org/en/latest/reference/unitofwork-associations.htmlif
I understood correctly it seems that yes, this is the only way to
insert? Did I unerstand that page correctly?
========================================
In Client.php, that is OneToManyClient, we have to have something like this:
    public function __construct() {
         $this->orders = new ArrayCollection();
     }

    public function addOrder($order)
     {
         $this->orders[] = $order;
     }

    public function setFields($fields)
     {
         foreach ($fields as $key=>$value) {
                  $this->$key = $value;
         }
     }
 $metadata->mapOneToMany(array( 'fieldName' => 'orders',
                               'targetEntity' => 'Entities\\Order',
                               'mappedBy' => 'client',
                               'joinColumns' => array( 0 => array( 'name'
=> 'client_id',

'referencedColumnName' => 'client_id',

'nullable' => true,

'columnDefinition' => NULL,
                                                      ), )

                             ));

==
 In Order.php we have this:

    public function setClient($client)
     {
         $client->addOrder($this);
         $this->client = $client;
     }

    public function setFields($fields)
     {
         foreach ($fields as $key=>$value) {
                  $this->$key = $value;
         }
     }
 $metadata->mapManyToOne(array( 'fieldName' => 'client',
                               'targetEntity' => 'Entities\\Client',
                               'inversedBy' => 'orders',
                               'joinColumns' => array( 0 => array( 'name'
=> 'client_id',

'referencedColumnName' => 'client_id',

'nullable' => true,

'columnDefinition' => NULL,
                                                      ), )

                             ));

==

Then to insert $_POST order data to db for client_id = 1, we can do this:
$client = $em->find('Entities\Client', 1);
 if ($client === null) {
     echo "No client found.\n";
     exit(1);
 }
 $order = new Entities\Order;
 $order->setClient($client);
 $order->setFields($_POST);
 $em->persist($order);
 $em->flush();

-- 
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.

Reply via email to