gpt4 book ai didi

mysql - symfony 1.4,$this->save() 和 mysql 插入触发器

转载 作者:行者123 更新时间:2023-11-29 02:34:13 24 4
gpt4 key购买 nike

我有一个插入触发器,它根据存储在另一个表中的客户最新代码更新表中的产品代码。

使用 symfony 和 Propel,我正在执行以下操作(截断不必要的字段)

// actions.class.php
$lineitem = new LineItem();
$lineitem->setCustomerId( $customerId );

$thisProduct = ProductPeer::cacheProduct($orderDetails);
$lineitem->setCode($thisProduct->getCode()); // this should be fetching and setting the auto_code, inserted from the trigger.
$lineitem->save();

下面的cacheProduct函数(ProductPeer的一部分)

// ProductPeer.php
// auto_code field in DB left blank, ready to be written to by the trigger
// cacheProduct function
public static function cacheProduct($orderDetails)
{
$product = new Product();
$product->setName( $orderDetails->getName() );
$product->setCustomerCode( $orderDetails->getCustomerCode() );
//$product->setCode(); // this will be set by the TRIGGER on insert.
$product->save();

return $product->getId();
}

所以问题是产品正在插入,触发器正在成功运行,但 Symfony 永远不知道新插入的“代码”值。运行新的 ProductPeer::retrieveByPK() 仍然显示空的“代码”字段。

所以从本质上讲,在任何时候,$lineitem->getCode() 都会返回 null。

我试过将它包装在交易中,但它不应该是必要的......而且这也有可能成为一个循环,除非绝对必要,否则我不想重复打开和关闭交易。

1) MYSQL 触发器什么时候在 $xxx->save() 上真正运行?在剧本的最后?2) 我怎样才能在触发后访问这个值,同时仍在同一个脚本中?

已找到解决方案,谢谢 :)使用 Propel 1.4.8 或更高版本

最佳答案

设置

reloadOnInsert="true"

在你的表架构上,重建你的模型:Example

(请注意,这可能已在较新版本的 Propel 中引入 - 检查您的 Propel 插件的版本。)

关于mysql - symfony 1.4,$this->save() 和 mysql 插入触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com