cakephp在一个模型和控件中的两个表中插入数据

时间:2013-12-11 08:06:17

标签: cakephp

我有两个表和两个我在'两个'表中有一个外键two_one_id 我想一次在两个表中插入数据,意味着在一个表格中插入数据,那么如何管理控制器和模型,我可以为此制作一个模型和一个控制器?然后如何为此创建模型和控制器 我应该选择哪种类型的关系?

我制作了两个不同的Tabele One.php和Two.php 我已经制作了两个Controller OnesController.php和twosController.php 我可以在他们两个中使用脚手架并使用脚手架我可以在控制器和模型中的两个表中插入数据,如果可以使用脚手架,那么如何完成它,或者在此代码中我试过没有脚手架,手动管理视图* /

/ * One.php文件      

            public $displayField = 'name';

            public $hasOne = array(
                'Two' => array(
                    'className' => 'Two',
                    'foreignKey' => 'two_one_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
                )
            );
        }

// Two.php

<?php
App::uses('AppModel', 'Model');

    class Two extends AppModel {

               public $displayField = 'sname';


            public $belongsTo = array(
                'One' => array(
                    'className' => 'One',
                    'foreignKey' => 'two_one_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
                )
            );
   }

// OnesController.php

        <?php
        App::uses('AppController', 'Controller');
        /**
         * Ones Controller
         *
         * @property One $One
         * @property PaginatorComponent $Paginator
         */
        class OnesController extends AppController {

        /**
         * Helpers
         *
         * @var array
         */
            public $helpers = array('Html','Form');

                public $uses = array('One','Two');


            public $components = array('Paginator');


            public function index() {
                $this->One->recursive = 0;
                $this->set('ones', $this->Paginator->paginate());
            }


            public function view($id = null) {
                if (!$this->One->exists($id)) {
                    throw new NotFoundException(__('Invalid one'));
                }
                $options = array('conditions' => array('One.' . $this->One->primaryKey => $id));
                $this->set('one', $this->One->find('first', $options));
            }

                    public function add() {
                if ($this->request->is('post')) {
                    $this->One->create();
                    if ($this->One->save($this->request->data)) {
                        $this->Session->setFlash(__('The one has been saved.'));
                        return $this->redirect(array('action' => 'index'));
                    } else {
                        $this->Session->setFlash(__('The one could not be saved. Please, try again.'));
                    }
                }
            }


            public function edit($id = null) {
                if (!$this->One->exists($id)) {
                    throw new NotFoundException(__('Invalid one'));
                }
                if ($this->request->is(array('post', 'put'))) {
                    if ($this->One->save($this->request->data)) {
                        $this->Session->setFlash(__('The one has been saved.'));
                        return $this->redirect(array('action' => 'index'));
                    } else {
                        $this->Session->setFlash(__('The one could not be saved. Please, try again.'));
                    }
                } else {
                    $options = array('conditions' => array('One.' . $this->One->primaryKey => $id));
                    $this->request->data = $this->One->find('first', $options);
                }
            }

                    public function delete($id = null) {
                $this->One->id = $id;
                if (!$this->One->exists()) {
                    throw new NotFoundException(__('Invalid one'));
                }
                $this->request->onlyAllow('post', 'delete');
                if ($this->One->delete()) {
                    $this->Session->setFlash(__('The one has been deleted.'));
                } else {
                    $this->Session->setFlash(__('The one could not be deleted. Please, try again.'));
                }
                return $this->redirect(array('action' => 'index'));
            }}

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

    You Just Set Following Code to Your Controller
    OnesControllers.php
    public function add() {
            if ($this->request->is('post')) {
                $this->One->create();

            }
                 if (!empty($this->request->data)) {
            // We can save the User data:
            // it should be in $this->request->data['User']

            $one = $this->One->save($this->request->data);

            // If the user was saved, Now we add this information to the data
            // and save the Profile.

            if (!empty($one)) {
                // The ID of the newly created user has been set
                // as $this->User->id.
                $this->request->data['Two']['two_one_id'] = $this->One->id;

                // Because our User hasOne Profile, we can access
                // the Profile model through the User model:
                $this->One->Two->save($this->request->data);
            }




        } 
And Set This in Your View
view/one/add.ctp

<div class="ones form">
<?php echo $this->Form->create('One'); ?>
<fieldset>
    <legend><?php echo __('Add One'); ?></legend>
    <?php
        echo $this->Form->input('name',array('rows' => '10'));
        echo $this->Form->create('Two');
        echo $this->Form->input('sname');
    ?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>