- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在模型中使用了两个 Doctrine 概念:
当我加载父类的继承实例时,使用生命周期回调更新的父属性是错误的,不是我数据库的父类表中的值。
父{abstract}类:User
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)
/**
* 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;
}
}
然后在 Controller 中
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 对象,而不是当天的日期。 .
它甚至与继承加载有关吗?无法弄清楚它是从哪里来的。
最佳答案
您的updatedAt
可能来自User
类。在 User
类的 __construct()
中,使用 $this->createdAt = new DateTime()
和 $ 填充数据this->updatedAt = new DateTime()
。我认为这是一个不好的做法,因为 createdAt
应该在 User
创建时填充,而 updatedAt
在 User
上填充创建或更新。尝试将您的 User
类更新为此(删除 __constructor
):
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;
// ...
/**
* @ORM\PrePersist
*/
public function onPrePersist()
{
$this->createdAt = new DateTime();
$this->updatedAt = new DateTime();
}
/**
* @ORM\PreUpdate
*/
public function onPreUpdate()
{
$this->updatedAt = new DateTime();
}
}
关于datetime - Doctrine 类表继承属性在查询时具有错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618193/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!