0

ユーザーがProductsControllerブランド名を入力できるオートコンプリートフィールド('brand_name')として追加ビューがあります。ハンドラーで、ブランド名がデータベースにすでに存在するかどうかを確認したいのですが、brand_idを製品に設定する必要があります。データベースに存在しない場合は、新しいブランドを作成してデータベースに挿入する必要があります。

以下のコードは単純化されています。

app / Model / Product.php

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

app / Controller / 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を初めて使用するので、アプローチが間違っている場合はお知らせください。

4

1 に答える 1

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'];
}
于 2013-02-14T18:48:02.963 に答える