【问题标题】:Save Multiples times Cakephp 3.x保存倍数 Cakephp 3.x
【发布时间】:2015-08-24 10:40:47
【问题描述】:

我想做的是多次保存我的数据。为了做到这一点,我把这段代码放在我的控制器中:

foreach ($tw->statuses as $t) {
            $tw->image = $t->user->profile_image_url;
            $tw->name = $t->user->name;
            $tw->screenname = $t->user->screen_name;
            $tw->message = $t->text;
            $tw->Fil_id = $FiltreId;
            $this->Twes->save($tw);
    }
return $this->redirect(['action' => 'index']);

但是当执行完成时,我只找到保存在我的数据库中的最后一条记录,而没有找到其他记录。谁能帮我 ?

【问题讨论】:

    标签: php database save cakephp-3.0


    【解决方案1】:

    这可能是由于各种原因造成的:

    1. 变量$tw->statuses 只包含一个状态。
    2. 您存储数据的表有一个唯一索引,该索引在第二次插入数据时发生冲突。

    您能否提供更多信息(例如表描述或命名变量在迭代之前的 var_dump)以准确指出发生了什么?

    【讨论】:

    • 感谢您的回复。当我调试 $tw 时,它包含多个状态(至少 5 个)。我认为问题在于使用 save();你说的数据发生冲突,因为在数据库中我发现记录的是最后一个数据。
    • @Sam 那么问题也可能是在foreach 内部你正在改变一个$tw 的实例,也许这就是为什么要保存同一行,因此你可以尝试做在foreach 的第一行之后? $test = clone $tw;$test->image = $t->user...等等
    【解决方案2】:

    我找到了问题所在。如您所见,我更新了代码,并在 foreach 中使用了 TableRegistry 并使用了 newEntity:

    $oPeople = TableRegistry::get('Tweets');
    
        $oQuery = $oPeople->query();
    
        foreach ($tw->statuses as $t) {
                $test = array($FiltreId,$t->text,$t->user->name,$t->user->screen_name,$t->user->profile_image_url,null,null,null,null,null);
                $tw = $oPeople->newEntity($test);
                $tw->image = $t->user->profile_image_url;
                $tw->name = $t->user->name;
                $tw->screenname = $t->user->screen_name;
                $tw->message = $t->text;
                $tw->Fil_id = $FiltreId;
                $this->Twes->save($tw);
        }
    
        return $this->redirect(['action' => 'index']);
    

    这样保存所有数据,而不仅仅是最后一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多