在 cakephp 的 saveall 中插入多行

问题描述 投票:0回答:2

我是 Cake 的新手,不知道如何在单个 saveall 函数中插入多行, 我有这张桌子,

CREATE TABLE IF NOT EXISTS `dates` (
`date` varchar(10) COLLATE utf8_unicode_ci NOT NULL
)

我想做的是让用户使用 JQuery calander 选择开始日期和结束日期,一旦提交,这个范围内的所有日期都将保存到数据库中,我已经得到了日期数组,例如:

`array(
      (int) 0 => '5/8/2013',
(int) 1 => '6/8/2013',
(int) 2 => '7/8/2013',
(int) 3 => '8/8/2013',
)

` 然后我的控制器看起来像这样:

public function index(){

if ($this->request->is('post')) {
                 $this->Date->create();

            $data = array();
            $data['dates']=array();

            $startDate = $this->request->data['Date']['from'];
            $endDate = $this->request->data['Date']['to'];

            $datesBlocked = $this->loopDates($this->request->data['Date']['from'],$this->request->data['Date']['to']);

            $data['dates'][] = $this->request->data['Blockdate']['from'];
            $data['dates'][] = $this->request->data['Blockdate']['to'];

            /*foreach($datesBlocked  as $data) {             
            $data['dates'][] = $data;               
            }*/

            if($this->Date->saveAll($data)) {

                $this->Session->setFlash(__('done'));

                 if ($this->Session->read('UserAuth.User.user_group_id') == 1) {
                   // $this->redirect("/manages");
                }
            }
            }
public function loopDates($from,$to){
         $blockdates = array();     
    $start = strtotime($from); 
    $end = strtotime($to);  
    debug($start);
    $counter = 0;       
 for($t=$start;$t<=$end;$t+=86400) {
            $d = getdate($t);
            $blockdates[$counter++] =  $d['mday'].'/'.$d['mon'].'/'.$d['year'];
}   
debug($blockdates);
return $blockdates; 

}

问题是我无法获得 foreach 工作,如果我取消注释 foreach,我得到错误说非法字符串偏移'日期',所以我评论说并尝试只将开始日期和结束日期添加到数组中以查看是否有效,然后我又说了一个错误。

`array(
'dates' => array(
    (int) 0 => '08/05/2013',
    (int) 1 => '09/05/2013'
)

) ` 注意事项(8):数组到字符串的转换【CORE\Cake\Model\Datasource\DboSource.php, line 1005】代码

因为我想在一个字段中插入 2 个值...我知道它应该是这样的

`array(
  'dates' => array( (int) 0 => '08/05/2013',        
)
  'dates' => array((int) 1 => '09/05/2013'
      ))

`但不知道该怎么做。任何帮助将不胜感激!!!!

php cakephp cakephp-2.0 cakephp-2.1
2个回答
0
投票

您希望数组使用

saveAll()
保存多个日期的结构是这样的:

array(
    'Date' => array(
        0 => array(
            'date' => '08/05/2013',
        ),
        1 => array(
            'date' => '09/05/2013',
        )
    ),
)

0
投票

我知道这有点晚了,但是要在循环中写入多行,您必须使用 create() 继续保存。

例如:

foreach($items as $lineItem){

    $this->Invoice->create();

    $this->Invoice->save(array(
        'user_id'=>$property['User']['id'],
        'invoice_id'=>$invId['Invoices']['id'],
        'item_id'=>$lineItem['item_number'],    
        'quantity'=>$lineItem['quantity'],
        'price'=>$lineItem['mc_gross']
    );

}

只是觉得值得一提,希望它能帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.