【问题标题】:Save data in multiple rows using foreach cakephp使用 foreach cakephp 将数据保存在多行中
【发布时间】:2016-02-26 21:52:16
【问题描述】:

我正在使用 cakephp 来保存多个数据。 我在会话中保存了数据,它工作正常。 但我对 foreach 循环中的问题感到不安。 这是保存多个数据的控制器:

 foreach($currentSessionData as $key):
                   // debug($key);
                    $this->request->data[$table_name]['tutor_name'] = $key['tutor_name'];
                    $this->request->data[$table_name]['area_id'] = $key['area_id'];

                    $this->$table_name->save($this->request->data);
                    endforeach;

当我调试 $currentSessionData 时,我得到如下数组:

array(
'application_attachment' => '',
'desc' => '',
'Post' => array(
    'tutor_name' => 'Muhammad Usman',
    'tutor_email' => 'usman@gmail.com',
    'tutor_number' => '123123',
    'tutor_gender' => 'male',
    'city_id' => '2',
    'tutor_address' => 'asdasdas',
    'area_id' => array(
        (int) 0 => '3',
        (int) 1 => '4'
    ),
    'user_id' => '47'
)

) 调试($key) 返回:

array(
'tutor_name' => 'Muhammad Usman',
'tutor_email' => 'usman@gmail.com',
'tutor_number' => '123123',
'tutor_gender' => 'male',
'city_id' => '2',
'tutor_address' => 'asdasdas',
'area_id' => array(
    (int) 0 => '3',
    (int) 1 => '4'
),
'user_id' => '47'

) 当我写的时候

 $this->request->data[$table_name]['tutor_name'] = $key['tutor_name'];
 $this->request->data[$table_name]['area_id'] = $key['area_id'];

它给出了非法字符串偏移的错误。

如果我只是像这样保存 $key:

 foreach($currentSessionData as $key):
                    $this->$table_name->save($key);
                    endforeach;

                $this->Session->setFlash('Account created!');

它给出错误: 数组到字符串的转换 [CORE\Cake\Model\Datasource\DboSource.php,第 1009 行]

还有为什么 foreach 不迭代 '0' 索引。 任何帮助。提前致谢。

【问题讨论】:

  • 你为什么不接受你的问题的任何答案?

标签: php cakephp foreach


【解决方案1】:
foreach($currentSessionData as $k=>$v):
        if ($k === 'Post') {
            $this->request->data[$table_name]['tutor_name'] = $v['tutor_name'];

            for($i=0;$i<count($v['area_id']);$i++){

                $this->request->data[$table_name]['area_id'] = $v['area_id'][$i];
                $this->$table_name->save($this->request->data);
            }

        }

    endforeach;

但是在 area_id 中你有另一个数组,你需要决定你需要保留哪个值。另请阅读有关数组的更多信息。

【讨论】:

  • 谎言...我需要将所有值保存在下一行的 area_id 中。
  • 因此,'area_id' => array((int) 0 => '3',(int) 1 => '4') 实际的 area_id 是 34?
  • 同样在你的解决方案中,如果你使用 $k。 if ($v === '发布')
  • 您的解决方案也给出了错误.. 字符串到数组的转换。
  • 那是因为您需要决定从 area_id 中保留哪个值....您是否保留了 area id 中的所有值?你怎么把它们加在一起?因为现在你在 area_id 中有两个值,我猜你的数据库中只有一个 area_id 列......
【解决方案2】:

你可以试试这个。

foreach($currentSessionData as $key):             
    $this->request->data[$table_name]['tutor_name'] = $key['Post']['tutor_name'];
    $this->request->data[$table_name]['area_id'] = $key['Post']['area_id'][$i]; //$i= 0 or 1 ( only or your given array)
    $this->$table_name->save($this->request->data);
endforeach;

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多