【问题标题】:Doctrine Mapped Superclass not recognizing primary key学说映射超类不识别主键
【发布时间】:2012-06-19 10:18:45
【问题描述】:

我有一个这样定义的映射超类:

/** @ORM\MappedSuperclass */
abstract class BaseEntity {
/**
 * @var string $id
 *
 * @ORM\Column(name="id", type="string", length=32, nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
protected $id;

/**
 * @var datetime $dateCreated
 *
 * @ORM\Column(name="date_created", type="datetime", nullable=false)
 */
protected $dateCreated;

function __construct() {
    $this->id = $this->generateId();
}

还有一个扩展它的子类。我得到了这个例外:

General error: 1364 Field 'id' doesn't have a default value 

我在构造对象后对 getId 方法进行了回显,它返回了一个有效的字符串,所以不是这样。有趣的是,在将某些内容插入同一个表之前,我会进行查找查询。查找查询识别“id”字段,插入不识别但都识别 date_created 字段。会发生什么?

【问题讨论】:

    标签: php orm symfony doctrine-orm


    【解决方案1】:

    如果您自己生成 id,您应该使用:

    * @ORM\GeneratedValue(strategy="NONE")
    

    IDENTITY 告诉学说中继数据库特定的身份生成。

    【讨论】:

    • 我完全忽略了这一点,因为我没有指定自动增量,但 Doctrine 认为无论如何我都应该这样做。这解决了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多