首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在插入前使用Laminas DB TableGatewayEvent和TableGateway操作数据

在插入前使用Laminas DB TableGatewayEvent和TableGateway操作数据
EN

Stack Overflow用户
提问于 2022-05-24 05:35:14
回答 1查看 200关注 0票数 0

在使用Laminas\Db\TableGateway\TableGateway类执行插入到实际表之前,我试图操作数据集。其目的是强制设置某些字段,如created_bycreated_on,以确保该值在整个应用程序中是一致的。示例:

代码语言:javascript
复制
$dataset['created_by'] = App::getUserId();
$dataset['created_on'] = new \DateTime(); // This is just example as Laminas won't accept DateTime object for DateTime field and requires the string format instead. But i suppose you got the point.

请理解,我可以使用Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent将事件侦听器附加到TableGateway,而我所附加的监听器在“preInsert”事件期间确实会触发。但是,我无法找到一种方法来操作包含要插入的数据集的Laminas\Db\Sql\Insert。

代码语言:javascript
复制
$eventManager = new \Laminas\EventManager\EventManager();
$eventManager->attach("preInsert", function (\Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent $event) {
    /**
     * @var \Laminas\Db\Sql\Insert
     */
    $insertObject = $event->getParam("insert");
    var_dump($insertObject->getRawState());
});

$feature = new \Laminas\Db\TableGateway\Feature\EventFeature($eventManager);
$table = new \Laminas\Db\TableGateway\TableGateway("test_table", $adapter, $feature);

$table->insert(array(
    "name" => "hello",
    "description" => "world",
    "created_by" => NULL,
    "created_on" => NULL
));

上面的代码片段可以工作,回调函数确实会被触发。我可以考虑执行preInsert操作的另一种方法,例如扩展类,但我认为这并不符合Laminas框架的意图。

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 05:47:41

在使用Laminas\Db\Sql\Insert对象时,您似乎可以将值直接赋值为普通对象属性。

在我的例子中,它只是这样设置属性。

代码语言:javascript
复制
    $insertObject->created_by = 1000;
    $insertObject->created_on = "2022-03-15 05:06:07";

成为

代码语言:javascript
复制
$eventManager = new \Laminas\EventManager\EventManager();
$eventManager->attach("preInsert", function (\Laminas\Db\TableGateway\Feature\EventFeature\TableGatewayEvent $event) {
    /**
     * @var \Laminas\Db\Sql\Insert
     */
    $insertObject = $event->getParam("insert");
    $insertObject->created_by = 1000;
    $insertObject->created_on = "2022-03-15 05:06:07";
    var_dump($insertObject->getRawState());
});

$feature = new \Laminas\Db\TableGateway\Feature\EventFeature($eventManager);
$table = new \Laminas\Db\TableGateway\TableGateway("test_table", $adapter, $feature);

$table->insert(array(
    "name" => "hello",
    "description" => "world",
    "created_by" => NULL,
    "created_on" => NULL
));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72357647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档