Bonjour,
Jeune débutant avec cakephp je voulais savoir si il était possible de faire en une seule page un formulaire contenant des informations de plusieurs tables séparé ??

Dans mon cas je voudrais qu'a la création d'un bon de commande table (orders lié a users par user_id) il me propose une liste d'addresses que je lui ai déjà renseigné (table addresses lié a users par user_id) ainsi qu'une liste de contacts (table contacts lié a users par user_id) ressortir le taux de tva qui est dans la table addresses (champs tx_tva).

Est-ce possible ?

Cordialement

5 réponses


Il faut faire plusieurs save dans le controller. C'est possible mais ne cherche pas une fonction toute faite :)

Sharka
Auteur

j'ai fais comme ça mais ça ne fonctionne pas :
Mon controller :

public function members_add() {
        $id_user = $this->Auth->user('id');
        $id_order = $this->Order->id;
        $this->Order->user_id = $id_user;
        $this->Item->order_id = $id_order;
        if ($this->request->is('post') || $this->request->is('put')) {
            $this->Order->save($this->request->data);
            $this->Item->save($this->request->data);
        }
        debug($this->request->data);
    }

ma vue :

<div class="orders form">
<?php echo $this->Form->create('Order');?>
    <fieldset>
        <legend><?php echo __('New Order'); ?></legend>
    <?php
        echo $this->Form->input('number');
        echo $this->Form->input('comment');
        echo $this->Form->input('user_id',array('value'=>$user_id,'type'=>'hidden'));
        echo $this->Form->create('Item');
            echo $this->Form->input('name');
            echo $this->Form->input('reference');
            echo $this->Form->input('quantity');
            echo $this->Form->input('price_unit');
            echo $this->Form->input('sub_total');
            echo $this->Form->input('order_id',array('value'=>$order_id,'type'=>'hidden'));
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit'));?>
</div>

J'ai plusieurs erreur :

Undefined variable: user_id [APP/View/Orders/members_add.ctp, line 14]
Undefined variable: order_id [APP/View/Orders/members_add.ctp, line 14]

Et quand je post j'ai :

Notice (8): Indirect modification of overloaded property OrdersController::$Item has no effect [APP/Controller/OrdersController.php, line 49]
Fatal error: Call to a member function save() on a non-object in /Users/aurelien/Sites/id_ordering_system/app/Controller/OrdersController.php on line 52

Je sais plus quoi faire, merci pour votre aide

Tu ne peux pas avoir un form dans un form.
Il faut plutot que tu fasse input('Item.name');

Sharka
Auteur

faut t'il que je mette plusieur save dans le controlleur ??

$this->Order->save($this->Order->data);
$this->Item->save($this->Item->data);

Car il me sort un message d'erreur :

Fatal error: Call to a member function save() on a non-object in /Users/aurelien/Sites/id_ordering_system/app/Controller/OrdersController.php on line 48

Dans ma vu j'ai modifié le formulaire comme suit :

<div class="orders form">
<?php echo $this->Form->create('');?>
    <fieldset>
        <legend><?php echo __('New Order'); ?></legend>
    <?php
        echo $this->Form->input('Order.number');
        echo $this->Form->input('Item.name');
        echo $this->Form->input('Item.reference');
        echo $this->Form->input('Item.quantity');
        echo $this->Form->input('Item.price_unit');
        echo $this->Form->input('Item.sub_total');
        echo $this->Form->input('Order.comment');
        echo $this->Form->input('Order.user_id',array('type'=>'text'));
        echo $this->Form->input('Item.order_id',array('type'=>'text'));
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit'));?>
</div>

Que dois-je mettre dans <?php echo $this->Form->create('');?> ?? comme y'a plusieurs formulaire j'ai laissé vide

Merci

EDIT : quand je supprime la fonction save mon débug m'affiche bien les data :

Array
(
    [Order] => Array
        (
            [number] => test
            [comment] => fdfsd
            [user_id] => 1
        )
    [Item] => Array
        (
            [name] => test
            [reference] => sfdsdf
            [quantity] => 9
            [price_unit] => 6
            [sub_total] => 54
            [order_id] => 7
        )
)
Sharka
Auteur

bonjour,
apres plusieurs essais je n'arrives toujours pas a enregister dans 2 tables.
Quelqu'un pourrait m'aider ??
Voila mon code mais ça ne sauvegarde pas dans la db malgré que le débug m'affiche bien des infos:

public function members_add() {

        $user_id = $this->Auth->user('id');
        $d = $this->request->data;
        $d'Order']'user_id'] = $user_id;
        $order_id = $this->Order->id;
        $d'Item']'order_id'] = $order_id;
        $this->Order->saveAll($d);
        debug($d);
    }

Cordialement,