保存倍数 Cakephp 3.x

Posted

技术标签:

【中文标题】保存倍数 Cakephp 3.x【英文标题】:Save Multiples times 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']);

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

【问题讨论】:

【参考方案1】:

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

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

您能否提供更多信息(例如表描述或命名变量在迭代之前的 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']);

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

【讨论】:

以上是关于保存倍数 Cakephp 3.x的主要内容,如果未能解决你的问题,请参考以下文章

cakephp新字段不保存

cakephp 保存返回 true 但不保存

Cakephp:选择登录后要保存的数据

CakePHP 2.0 无法保存

CakePHP- 保存相关模型数据

CakePHP 2.0 不保存