为什么只有最后一项保存在数据库中?

时间:2014-08-12 21:12:35

标签: php mysql cakephp

我有问题,因为只有来自循环的最后一项保存在数据库中。 我正在使用CakePhp 2.x

控制器:

for ($x=1; $x <= count($this->request->data['Goodsandoffer'])/3;$x++){
                            $promID = $this->request->data['Goodsandoffer']['promotionaloffer_id_'.$x];
                            if($this->request->data['Goodsandoffer']['cenaPromocyjna_'.$x] != ''){
                                $helperReqestTable3 = array('promotionaloffer_id'=>$this->request->data['Goodsandoffer']['promotionaloffer_id_'.$x],'good_id'=>$this->request->data['Goodsandoffer']['good_id_'.$x],'cenaPromocyjna'=>$this->request->data['Goodsandoffer']['cenaPromocyjna_'.$x]);
                                $helperReqestTable['Goodsandoffer']=$helperReqestTable3;
                                debug($helperReqestTable);
                                $this->Goodsandoffer->save($helperReqestTable);
                            }
                        }

以下是我在循环中调试的方法:

array(
    'Goodsandoffer' => array(
        'promotionaloffer_id' => '7',
        'good_id' => '18',
        'cenaPromocyjna' => '1'
    )
)

在下一次互动中:

array(
    'Goodsandoffer' => array(
        'promotionaloffer_id' => '7',
        'good_id' => '19',
        'cenaPromocyjna' => '2'
    )
)

在数据库中,只创建一行包含最后一项。

型号:

class Goodsandoffer extends AppModel {

    public $displayField = 'id';

    public $belongsTo = array(
        'Promotionaloffer' => array(
            'className' => 'Promotionaloffer',
            'foreignKey' => 'promotionaloffer_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Good' => array(
            'className' => 'Good',
            'foreignKey' => 'good_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
}

2 个答案:

答案 0 :(得分:3)

在致电保存之前,您是否尝试过呼叫$this->Goodsandoffer->create()?这样你就肯定告诉Cake每次创建一条新记录。

在Cake中创建和保存数据的一般过程是:

  1. $this->Model->create()
  2. $this->Model->set($data_array)
  3. $this->Model->save()
  4. 您还可以将$data_array传递给save()函数,从而消除上述第2步:

    $this->Model->create();
    $this->Model->save($data_array);
    

    注意: from the manual(如果您未使用create()):

      

    在循环中调用save时,不要忘记调用clear()。

    您可以创建新数据的另一种方法是确保模型的主键在您传递到保存的数据集中为null,尽管这有点不太明显,可能最好坚持create / [set /] save flow:

    $data = array('id' => null, 'somefield' => 'foobar');
    $this->Model->save($data); // new record created
    

答案 1 :(得分:0)

在cakephp 2.0 $ this-&gt; Model-&gt; create()中创建工作正常。但是如果您使用的是cakephp版本3或更高版本,那么请遵循以下代码

$saveData['itemId']             = 1;

$saveData['qty']                = 2;

$saveData['type']               = '0';

$saveData['status']             = 'active';

$saveData = $this->Model->newEntity($saveData);

$this->Model->save($materialmismatch);

在正常情况下,我们使用patchEntity

$this->Model->patchEntity($saveData, $this->request->data);

它只会保存数组的最后一个值,因此你必须使用带有数据的newEntity()