Ваша сущность нуждается как минимум в одном столбце, который действует как первичный ключ. Таким образом, либо вы добавляете столбец идентификатора в свой объект Product, либо добавляете некоторые аннотации в TimestampableTrait. Например, это работает:
trait TimestampableTrait
{
/**
* @ORM\Id
* @ORM\Column
*/
protected $createdAt;
}
/**
* @ORM\Entity()
* @ORM\Table(name="product")
*/
final class Product
{
use TimestampableTrait;
}
Что производит
CREATE TABLE product (
created_at VARCHAR(255) NOT NULL,
PRIMARY KEY(created_at)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;
Если вы хотите изменить определение столбца в своем классе продукта, вы можете использовать AttributeOverride следующим образом:
/**
* @ORM\Entity
* @ORM\Table(name="product")
* @ORM\AttributeOverrides({
* @ORM\AttributeOverride(
* name="createdAt", column=@ORM\Column(name="id")
* )
* })
*/
final class Product
{
use TimestampableTrait;
}
Который будет производить:
CREATE TABLE product (
id VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;
Обратите внимание, что вы не можете изменить тип столбца следующим образом.