【发布时间】: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;设置默认值。
-
如果您有解决方案,请使用答案部分而不是将其添加到问题中。