如何使用CakePHP在控制器的添加方法中创建多个对象

时间:2013-02-13 23:29:55

标签: php cakephp cakephp-2.3

我有ProductsController添加视图,作为自动填充字段('brand_name'),用户可以在其中输入品牌名称。 在我的处理程序中,我想检查数据库中是否已存在品牌名称,应在产品上设置brand_id。如果数据库中不存在,则应创建一个新的Brand并将其插入数据库中。

下面的代码已简化:

应用程序/型号/ Product.php

class Product extends AppModel {
    public $belongsTo = array('Brand');
}

应用程序/控制器/ ProductsController.php

class ProductsController extends AppController {
    public $helpers = array('Html', 'Form', 'Session');
    public $components = array('Session');

    public function add() {
        if ($this->request->is('post')) {
            $this->Product->create();

            $brand = $this->Product->Brand->find(
                'first', 
                array(
                    'conditions' => array(
                        'Brand.name' => $this->request->data['Product']['brand_name']
                    )
                )
            );
            if($brand)
            {
                $this->request->data['Product']['brand_id'] = intval($brand['Brand']['id']);
            }
            else
            {
                // Add new brand
                //$this->Product->Brand->create();
                $this->Product->Brand->name = $this->request->data['Product']['brand_name'];
            }

            if ($this->Product->saveAll($this->request->data)) {
                $this->Session->setFlash(__('The product has been saved.'));
                //$this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Unable to add the product.'));
            }
        }
    }
}

除了创建和插入新的Brand对象外,一切正常。如何在代码中创建此对象? 我是CakePHP的新手,所以如果我的方法有误,请告诉我。

1 个答案:

答案 0 :(得分:1)

我通过向$this->request->data数组添加一个新值来修复此问题,如下所示:

if($brand)
{
    $this->request->data['Product']['brand_id'] = intval($brand['Brand']['id']);
}
else
{
    $this->request->data['Brand']['name'] = $this->request->data['Product']['brand_name'];
}