cakephp从视图中检索HABTM值

时间:2014-01-02 03:17:34

标签: cakephp

我有一个问题要问。 我正在使用cakephp 2.0,我有表产品,材料和材料_产品。

表产品中的

  • id
  • 姓名
  • 描述
  • 销售
  • saleprice
  • frame_material_id
表格材料中的

  • ID
  • 名称

in table materials_products

  • ID
  • PRODUCT_ID
  • material_id

我只是想问一下如何在productController中检索material_id的输入数据?(从视图中)。 材料和产品具有HABTM关系。

我的意思是我知道我是否想从产品控制器中的名称中检索输入数据我可以使用

    $this->request->data['Product']['name']

但如果我想从产品中检索输入material_id,我应该使用:

    $this->request->data['Product']['Material']

    $this->request->data['Material']['id']

    $this->request->data['Material']

还是其他什么?我试图使用所有3但我不断收到错误。不同类型的错误。

这是我到目前为止尝试过的代码(productController):

    public function addproductnewcont($colorcounts = null, $groupid = null, $id = null) {
    $start = $id - $colorcounts + 1;
    $setids = range($start, $id);

    if (!$this->Product->exists($id)) {
        throw new NotFoundException(__('Invalid product'));

    }
    if ($this->request->is('post') || $this->request->is('put')) {
        $saleprice = $this->request->data['Product']['saleprice'];
        $sale = $this->request->data['Product']['sale'];
        $framematid = $this->request->data['Product']['frame_material_id'];
        $materialids = $this->request->data['Material']; //this is the problem
        $fieldtoupdate=array(
                'saleprice'=>"'$saleprice'",
                'frame_material_id'=>"'$framematid'",
                'sale'=>"'$sale'");

        $this->loadModel('MaterialsProduct', 2);
        foreach($setids as $setid) {
        if ($this->Product->updateAll($fieldtoupdate,array('Product.id'=> $setid))) {
            $this->_savematerial($materialids, $setid);
            if ($setid == $id) {
            $this->Session->setFlash(__('The product has been saved'));
            return $this->redirect(array('action' => 'index'));
            }
        } else {
            $this->Session->setFlash(__('The product could not be saved. Please, try again.'));
        } }
    }


        public function _savematerial($materialids = null, $setid = null){
        foreach($materialids as $materialid){
                $this->MaterialsProduct->create();
                $this->MaterialsProduct->saveField('product_id', $setid);
                $this->MaterialsProduct->saveField('material_id', $materialid); 
            }

这给我错误说

    Array to string conversion
你可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。希望这能帮助那些寻求与我相同答案的人。

我的代码没问题,除了我需要在代码中再添加一个foreach。 (我不知道实际问题)。

        public function _savematerial($materialids = null, $setid = null){
        foreach($materialids as $materialid){
            foreach($materialid as $materiali){
                $this->MaterialsProduct->create();
                $this->MaterialsProduct->saveField('product_id', $setid);
                $this->MaterialsProduct->saveField('material_id', $materiali); 
            }
           }
  }
谢谢大家。