【问题标题】:How to modify Symfony ORM insert\update query如何修改 Symfony ORM 插入\更新查询
【发布时间】:2021-03-10 03:47:13
【问题描述】:

我有一个迁移到 Symfony 的项目,该项目有多个表,还有一些表迁移到 ORM,但现在我需要从 Symfony 验证/更新到具有实体但不受 ORM 管理的表。问题在于需要一些值的非空列,而在实体中,由于表关系,我无法定义该值。

可以在提交到数据库之前编辑 MySql 查询。

例如我有实体:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @ORM\Table(name="p_user")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User
{
    /**
     * @var int
     *
     * @ORM\Column(name="user_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string|null
     *
     * @ORM\Column(name="name", type="string", length=55, nullable=true)
     */
    private $name;

    /**
     * @var Permission
     *
     * @ORM\ManyToOne(targetEntity="Permission", inversedBy="user", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="permission_id", referencedColumnName="permission_id", onDelete="CASCADE")
     */
    private $permission;
}

permission_id 可以为空,但在数据库中不为空,默认值为 0,name 相同,但默认值为 ''。

这意味着当我让flush,ORM 执行INSERT INTO p_user (name, permission_id) VALUES ('name', null),但我也想执行INSERT INTO p_user (name) VALUES ('name')

按照我的意愿去做是可能的。

【问题讨论】:

  • 调整Doctrine生成的插入/更新sql代码是不切实际的。只需使用:private $permission = 0;设置默认值。
  • 如果您有解决方案,请使用答案部分而不是将其添加到问题中。

标签: symfony orm


【解决方案1】:

为此,您可以提供默认值。

private $permission = 0;

private $name = '';

【讨论】:

  • 不知道为什么,但这不起作用,它设置为 null 而没有定义值
  • 我喜欢创建自定义 nulltype 的解决方案,但现在我的问题是 ManyToOne、OneToOne、OneToMany 关系
猜你喜欢
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2016-06-14
相关资源
最近更新 更多