所以我是新的学说YAML映射和我不确定的东西。基本上,我有下面的YAML文件,我已经为您剥离,以及生成的实体文件。
YAML:
# src/ACME/Base/UserBundle/Resources/config/doctrine/User.orm.yml
ACME'UserBundle'Entity'User:
table: fos_user
type: entity
repositoryClass: ACME'UserBundle'Repository'User
id:
id:
type: integer
generator:
strategy: AUTO
fields:
firstName:
type: string
length: 30
column: first_name
nullable: false
lastName:
type: string
length: 50
column: last_name
nullable: false
dateJoined:
type: datetime
column: date_joined
nullable: false
实体:<?php
namespace ACME'UserBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
* User
*/
class User
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $firstName;
/**
* @var string
*/
private $lastName;
/**
* @var 'DateTime
*/
private $dateJoined;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set firstName
*
* @param string $firstName
* @return User
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
return $this;
}
/**
* Get firstName
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Set lastName
*
* @param string $lastName
* @return User
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
return $this;
}
/**
* Get lastName
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Set dateJoined
*
* @param 'DateTime $dateJoined
* @return User
*/
public function setDateJoined($dateJoined)
{
$this->dateJoined = $dateJoined;
return $this;
}
/**
* Get dateJoined
*
* @return 'DateTime
*/
public function getDateJoined()
{
return $this->dateJoined;
}
}
所以我的问题是我可以添加以下内容以便在保存之前设置dateJoined:
lifecycleCallbacks:
prePersist: [ setDateJoinedInsert ]
然而,我的问题是,因为我已经创建了列,我也生成了一个mutator (setter),这意味着有人可以覆盖dateJoined值,我不想这样做。那么,有没有一种方法不自动生成一个mutator,或者我必须从实体文件中删除它?我所遇到的问题是,如果有人对YAML文件进行更改并重新生成实体文件,则将再次创建mutator。
你可以在setter中创建自己的重写,这样它就永远不会被设置。
public function setDateJoined($dateJoined)
{
$this->dateJoined = new 'DateTime('now');
return $this;
}
就像user3442077说的,如果你检查你的字段的值,你将只能设置一次。如果对象中有一个值,那么setter就不会做任何事情,即使你用一个值调用它。