モデルで Doctrine の 2 つの概念を使用します。
- クラステーブルの継承
- ライフサイクル コールバック
親クラスの継承されたインスタンスをロードすると、データベースの親クラス テーブルにある値ではなく、ライフサイクル コールバックで更新される親プロパティが間違っています。
親 {abstract} クラス: ユーザー
use DateTime;
/**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="MyProject\CoreBundle\Repository\UserRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="entity_name", type="string")
* @ORM\DiscriminatorMap({"member" = "Member", "administrator" = "Administrator"})
* @ORM\HasLifecycleCallbacks()
*/
abstract class User implements AdvancedUserInterface, Serializable
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
protected $createdAt;
/**
* @var DateTime
*
* @ORM\Column(name="updated_at", type="datetime")
*/
protected $updatedAt;
// ...
public function __construct()
{
$this->createdAt = new DateTime();
$this->updatedAt = new DateTime();
// ...
return $this;
}
/**
* @ORM\PreUpdate
*/
public function onPreUpdate()
{
$this->updatedAt = new DateTime();
}
}
子クラス: メンバー
/**
* Member
*
* @ORM\Table(name="members")
* @ORM\Entity(repositoryClass="MyProject\CoreBundle\Repository\MemberRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Member extends User
{
// ...
public function __construct()
{
parent::__construct();
// ...
return $this;
}
}
次にコントローラーで
use MyProject\CoreBundle\Entity\Member;
public function someAction(Member $member)
{
$em = $this->getDoctrine()->getManager();
$member = $em->getRepository(Member::class)->find(1);
exit(var_dump($member->getUpdatedAt()));
// --> date of today, why?
}
ここに私のデータベースコンテンツの抜粋があります
// users
|----|---------------------|---------------------|-------------|
| id | created_at | updated_at | entity_name |
|----|---------------------|---------------------|-------------|
| 1 | 2016-01-01 00:00:00 | 2016-06-01 12:00:00 | member |
|----|---------------------|---------------------|-------------|
// members
|----|
| id |
|----|
| 1 |
|----|
メンバーの updatedAt プロパティをデバッグすると、値が2016-06-01 12:00:00
日付ではなく、に対応する DateTime オブジェクトであることが期待されます...
継承の読み込みにも関係していますか? それがどこから来たのかわかりません。