Symfony2 / Doctrine2-从数据库获取日期时间时的问题

伊安莱特

当我在进行Symfony2项目时,再次出现了一个奇怪的错误。

我创建了一个Check包含一个dateCreated属性和其他一些属性的Check实体,因此可以链接到扩展了的不同实体ProductBase以下是Check和的示例AProduct

/**
 * Check
 *
 * @ORM\Table(name="check")
 * @ORM\Entity
 */
class Check
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_created", type="datetime")
     */
    private $dateCreated;
    [...]


/**
 * @ORM\ManyToOne(targetEntity="Acme\BlogBundle\Entity\AProduct", inversedBy="checks")
 * @ORM\JoinColumn(name="aproduct_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $aproduct;
    [...]
}


/**
 * AProduct
 *
 * @ORM\Table(name="aproduct")
 * @ORM\Entity
 */
class AProduct extends ProductBase
{
    [...]


    /**
     * @ORM\OneToMany(targetEntity="Acme\BlogBundle\Entity\Check", mappedBy="product")
     * @ORM\OrderBy({"dateCreated" = "DESC"})
     */
    protected $checks;
    [...]
}

所以我的问题是,当我试图在我的dateCreated一个控制器中显示该属性时,请参见下面的代码,Symfony2(或Doctrine2)正向数据库中存储的日期添加一个月,而我不知道为什么会这样:

[...]
$aproduct = $aproducts[0];
$checks = $aproduct->getChecks();
$lastCheck = $checks->toArray()[0]; //I know it's not 'safe' but it's shorter to expose my problem
var_dump($lastCheck->getDateCreated());

结果:

object(DateTime)[854]
  public 'date' => string '2014-01-20 16:21:41' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

存储在数据库中的值:

2013-12-20 16:21:41

我最不明白的是,在另一个控制器中,使用完全相同的方法,但在不同的产品(BProduct例如)上,我得到了正确的日期……是否有人已经面临这个问题或对什么有任何线索要解决吗?

再次感谢你。如果您需要更多信息,请询问,我将尽最大努力为您提供帮助。

编辑:aproduct存储在其他人aproducts显示正确的日期...

伊安莱特

好吧,我终于找到了问题,我在这里的帖子真的很愚蠢,与Symfony或Doctrine完全无关,对此感到抱歉。aproduct在显示支票的最后一个实例时,我正在执行一些“测试”,而这些“测试”正在影响dateCreated价值。这是我在做什么:

public static function updateAProductStatus(AProduct $product){
    if(($check = $product->getChecks()->first()) instanceof Check){
        $date = $check->getDateCreated();
        $expiracyDate = $date->add(new \DateInterval('P1M')); //this line is the problem
        $status = self::getStatus($expiracyDate); //this is only returning 'expired', 'expiring' or 'good' based on the difference between today's date and dateCreated + 1 month
    } else {
        $status = 'expired';
    }
    return $status;
}

因此,作为写入代码,$date->add(new \DateInterval('P1M'));正在改变的存储值ChecksdateCreated属性。我不明白为什么会影响它,因为我没有直接在Check实例上工作

解决它的快速方法是DateTime在添加之前显式克隆实例DateInterval

$date = clone $date;

但是我将在我CheckAProduct实体中添加一个新字段来存储到期日期,而不是在每次更新时都对其进行计算。

更新:

我读到PHP将对象和数组作为引用而不是值传递。这就是为什么我在这里遇到问题。我不知道PHP就是那样。以后我会更加小心!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony2 Doctrine2 Oracle数据库NUMBER DEFAULT类型?

来自分类Dev

组,消息和位置之间的Symfony2 / Doctrine2数据库关系

来自分类Dev

获取doctrine2 / symfony2中的最后一个元素

来自分类Dev

Symfony2和Doctrine2:如何获取帖子的所有标签?

来自分类Dev

在持久之前将表单数据绑定到变量-Symfony2 / Doctrine2

来自分类Dev

Doctrine2 Symfony2扩展实体在不同的包中但具有相同的数据库表名称

来自分类Dev

COUNT = 0的Doctrine2 DQL问题

来自分类Dev

Doctrine2关联的获取器

来自分类Dev

尝试使用Symfony2和Doctrine2执行INSERT时出现“ 1064您的SQL错误”

来自分类Dev

使用Symfony2和Doctrine导入数据库

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

Symfony2,Doctrine2,MySql,查看表

来自分类Dev

Symfony2 + Doctrine2中的CakePHP模型行为?

来自分类Dev

使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

在Symfony2上的Doctrine2 YML映射

来自分类Dev

Symfony2 Doctrine2使用集合-表演

来自分类Dev

列的总和-Doctrine2 / Symfony2

来自分类Dev

symfony2 doctrine2不刷新新实体

来自分类Dev

Symfony2,Doctrine2,实体映射

来自分类Dev

doctrine2 symfony2关系实体

来自分类Dev

尝试生成Doctrine2 CRUD时遇到问题

来自分类Dev

Symfony2数据库配置

来自分类Dev

插入数据库symfony2

来自分类Dev

Symfony2,Doctrine,从数据库获取数据以生成Excel

来自分类Dev

Doctrine2 ORM-持续很长时间的操作

来自分类Dev

如何扩展Doctrine2的实体存储库构造函数?

来自分类Dev

doctrine2关联的额外延迟获取

来自分类Dev

将字段聚集到Doctrine2中的获取的对象

Related 相关文章

热门标签

归档