Symfony2,Doctrine2更新没有ID的行(此表仅包含“一个”行)

勒科波

我要创建实体设置,其中将包含有关页面的基本可编辑信息。我已经Settings.php使用以下来源创建了我的实体

<?php
namespace Acme\SettingsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 * @ORM\Table(name="settings") 
 */ 
class Settings
{    
    /**
     * @ORM\Column(type="string", length=100)
     */ 
    protected $page_name;

    /**
     * @ORM\Column(type="string", length=100)
     */
    protected $page_description;

    /**
     * @ORM\Column(type="string", length=100)
     */
    protected $page_email;                  
}

而且我不知道如何在控制器中知道将仅覆盖现有数据,而不创建新数据。这是我的控制器AdminController.php

public function indexAction(Request $request)
{
    if (false === $this->get('security.context')->isGranted('ROLE_ADMIN')) {
        throw new AccessDeniedException();
    }

    $settings = new Settings();

    $form = $this->createForm('settings', $settings);
    $form->handleRequest($request); 

    if($form->isValid())
    {
        $em = $this->getDoctrine()->getManager();
        $em->persist($settings);

        try {
            $em->flush();
        } catch (\PDOException $e) {
            // sth
        }
        $this->get('session')->getFlashBag()->add(
            'success',
            'Settings was successfuly changed'
        );
    }

    return $this->render('AcmeSettingsBundle:Admin:index.html.twig', array('form' => $form));
}

我没有对其进行测试,但是我相信它会使用新数据创建一个新的Settings对象。有什么帮助吗?

乔万·佩罗维奇(Jovan Perovic)

您应该始终将某个字段设置为ID,即使该字段是虚拟字段也是如此。

分配一些您将始终使用的默认值,这样您就可以毫无问题地更新设置。

通常,DBMS会警告您缺少唯一标识符,因此适用于Doctrine。

$settings = new Settings();
$settings->setId(Settings::DUMMY_IDENTIFIER); // const within class

# rest of the logic
# ....
$em = $this->getDoctrine()->getManager();
$em->persist($settings);

try {
    $em->flush();
} catch (\PDOException $e) {
}

您可以采用另一种方法:将每个属性都保留为一行。但是,您将需要构建更复杂的表单类型并执行更多查询。

编辑:

您可以使用原始SQL,但是灵活性较差:

# raw query
$sql = "UPDATE settings SET page_name = ?, page_description = ?, page_email = ?";

# data
$params = array( $settings->getPageName(), $settings->getPageDesc(), $settings->getPageEmail());

# must specify type due to protection against sql injection
$types = array(\PDO::PARAM_STR,\PDO::PARAM_STR,\PDO::PARAM_STR);

# execute it
$stmt = $this->getEntityManager()->getConnection()->executeUpdate($sql, $params, $types);

http://docs.doctrine-project.org/projects/doctrine-dbal/zh-CN/latest/reference/data-retrieval-and-manipulation.html#using-prepared-statements

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取doctrine2 / symfony2中的最后一个元素

来自分类Dev

Symfony2 Doctrine2 UniqueEntity验证,指定一个值

来自分类Dev

Doctrine2挑战,我有一个一对多,但没有多个

来自分类Dev

Doctrine2 Symfony2扩展实体在不同的包中但具有相同的数据库表名称

来自分类Dev

MySQL:更新2个表中所有与另一个查询匹配的行

来自分类Dev

MySQL创建一个视图,其中包含3个表中的2个表的所有行组合?

来自分类Dev

Doctrine2 + Symfony2保留每次插入,更新,删除的历史记录

来自分类Dev

Doctrine2 + symfony2使用FK删除历史记录表

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

Symfony2,Doctrine2,MySql,查看表

来自分类Dev

Symfony2 + Doctrine2中的CakePHP模型行为?

来自分类Dev

使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

在Symfony2上的Doctrine2 YML映射

来自分类Dev

Symfony2 Doctrine2使用集合-表演

来自分类Dev

列的总和-Doctrine2 / Symfony2

来自分类Dev

symfony2 doctrine2不刷新新实体

来自分类Dev

Symfony2,Doctrine2,实体映射

来自分类Dev

doctrine2 symfony2关系实体

来自分类Dev

带有symfony2和doctrine2的Oracle ORA-00904

来自分类Dev

symfony2 doctrine2:将select元素添加到现有实体

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

doctrine2(symfony2)多对多,带有“ WITH”和空值

来自分类Dev

Symfony2和Doctrine2:如何获取帖子的所有标签?

来自分类Dev

在doctrine2,Symfony2中查询具有条件异常错误

来自分类Dev

Symfony2 Doctrine2多对多将所有实体及其关系实体

来自分类Dev

// Entity和// Entity的映射彼此不一致-Symfony2 / Doctrine2

来自分类Dev

查询以联接2个表,并且仅保留其中一个表的1行

来自分类Dev

Symfony2更新数组中的行

Related 相关文章

  1. 1

    获取doctrine2 / symfony2中的最后一个元素

  2. 2

    Symfony2 Doctrine2 UniqueEntity验证,指定一个值

  3. 3

    Doctrine2挑战,我有一个一对多,但没有多个

  4. 4

    Doctrine2 Symfony2扩展实体在不同的包中但具有相同的数据库表名称

  5. 5

    MySQL:更新2个表中所有与另一个查询匹配的行

  6. 6

    MySQL创建一个视图,其中包含3个表中的2个表的所有行组合?

  7. 7

    Doctrine2 + Symfony2保留每次插入,更新,删除的历史记录

  8. 8

    Doctrine2 + symfony2使用FK删除历史记录表

  9. 9

    symfony2 doctrine2与实体的批处理错误

  10. 10

    Symfony2,Doctrine2,MySql,查看表

  11. 11

    Symfony2 + Doctrine2中的CakePHP模型行为?

  12. 12

    使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

  13. 13

    symfony2 doctrine2与实体的批处理错误

  14. 14

    在Symfony2上的Doctrine2 YML映射

  15. 15

    Symfony2 Doctrine2使用集合-表演

  16. 16

    列的总和-Doctrine2 / Symfony2

  17. 17

    symfony2 doctrine2不刷新新实体

  18. 18

    Symfony2,Doctrine2,实体映射

  19. 19

    doctrine2 symfony2关系实体

  20. 20

    带有symfony2和doctrine2的Oracle ORA-00904

  21. 21

    symfony2 doctrine2:将select元素添加到现有实体

  22. 22

    Symfony2 Doctrine2多对多将所有实体及其关系实体

  23. 23

    doctrine2(symfony2)多对多,带有“ WITH”和空值

  24. 24

    Symfony2和Doctrine2:如何获取帖子的所有标签?

  25. 25

    在doctrine2,Symfony2中查询具有条件异常错误

  26. 26

    Symfony2 Doctrine2多对多将所有实体及其关系实体

  27. 27

    // Entity和// Entity的映射彼此不一致-Symfony2 / Doctrine2

  28. 28

    查询以联接2个表,并且仅保留其中一个表的1行

  29. 29

    Symfony2更新数组中的行

热门标签

归档