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

kol*_*991 1 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);
                            }
                        }
Run Code Online (Sandbox Code Playgroud)

这是我在循环中调试的样子:

array(
    'Goodsandoffer' => array(
        'promotionaloffer_id' => '7',
        'good_id' => '18',
        'cenaPromocyjna' => '1'
    )
)
Run Code Online (Sandbox Code Playgroud)

在接下来的互动中:

array(
    'Goodsandoffer' => array(
        'promotionaloffer_id' => '7',
        'good_id' => '19',
        'cenaPromocyjna' => '2'
    )
)
Run Code Online (Sandbox Code Playgroud)

在数据库中只创建了最后一项的一行。

模型:

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' => ''
        )
    );
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ill 5

$this->Goodsandoffer->create()在调用 save 之前,您是否尝试过调用?这样你肯定会告诉 Cake 每次都创建一个新记录。

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

  1. $this->Model->create()
  2. $this->Model->set($data_array)
  3. $this->Model->save()

您还可以通过将您传递$data_arraysave()函数来消除上面的第 2 步:

$this->Model->create();
$this->Model->save($data_array);
Run Code Online (Sandbox Code Playgroud)

注意: 来自手册(如果您不使用create()):

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

您可以创建新数据的另一种方法是确保您的模型的主键null在您传递给 save 的数据集中,尽管这不太明显并且可能最好坚持使用 create/[set/]save 流程:

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