如何修改 Symfony ORM 插入\更新查询
Posted
技术标签:
【中文标题】如何修改 Symfony ORM 插入\\更新查询【英文标题】: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;设置默认值。 如果您有解决方案,请使用答案部分而不是将其添加到问题中。 【参考方案1】:为此,您可以提供默认值。
private $permission = 0;
private $name = '';
【讨论】:
不知道为什么,但这不起作用,它设置为 null 而没有定义值 我喜欢创建自定义 nulltype 的解决方案,但现在我的问题是 ManyToOne、OneToOne、OneToMany 关系以上是关于如何修改 Symfony ORM 插入\更新查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在学说 ORM Symfony 4.1 中使用 array_agg?
级联持久性不工作(Doctrine ORM + Symfony 2)