【问题标题】:Symfony DataFixtures set default valuesSymfony DataFixtures 设置默认值
【发布时间】:2014-12-26 20:13:23
【问题描述】:

我想在我的网站中设置一个初始 AdminUser。当我将它加载到数据库时,由于“updateAt”字段而无法上传。当我将 setUpdatedAt 留空时出现以下错误:

 SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'updatedAt' ca
 nnot be null

我在 Fixtures File 中设置的任何值都失败了,我收到以下错误:(我尝试在此示例中输入实际日期)

[Symfony\Component\Debug\Exception\FatalErrorException]
Parse Error: syntax error, unexpected '"2014-12-26 21:01:40"' (T_CONSTANT_E
NCAPSED_STRING), expecting identifier (T_STRING)

这是数据夹具文件:

<?php

namespace Usuarios\AdminBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Usuarios\UsersBundle\Entity\User;

class LoadUserData implements FixtureInterface
{
/**
* {@inheritDoc}
*/
public function load(ObjectManager $manager)
    {
    $userAdmin = new User();
    $userAdmin->setUsername('Admin');
    $userAdmin->setPlainPassword('1234');
    $userAdmin->setEmail('admin@web.com');
    $userAdmin->setRoles(array('ROLE_ADMIN'));
    $userAdmin->setEnabled('1');
    $userAdmin->setUpdatedAt(\"2014-12-26 21:01:40");

    $manager->persist($userAdmin);
    $manager->flush();
    }
}

我尝试在 updatedAt 中输入许多不同类型的数据,但我无法获得正确的数据类型或获取将其留空的代码。

这里是 UpdatedAt 的实体代码:

<?php

namespace Usuarios\UsersBundle\Entity;

use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * User
 *
 * @ORM\Table(name="0_00_users")
 * @ORM\Entity
 */
class User extends BaseUser

/**
 * @var datetime $updatedAt
 *
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(name="updatedAt", type="datetime", nullable=true)
 */
protected $updatedAt;

/**
 * Set updatedAt
 *
 * @param \DateTime $updatedAt
 * @return User
 */
public function setUpdatedAt($updatedAt)
{
    $this->updatedAt = $updatedAt;

    return $this;
}

/**
 * Get updatedAt
 *
 * @return \DateTime 
 */
public function getUpdatedAt()
{
    return $this->updatedAt;
}

我该如何解决这个问题?

【问题讨论】:

    标签: php symfony datetime sql-update


    【解决方案1】:

    您缺少$updatedAt 值。

    这应该是 Doctrine 的做法。删除不需要的逻辑。

    /**
     * //...
     * @ORM\HasLifecycleCallbacks
     */
    class User extends BaseUser
    
        // ...
    
        /**
         * Tell doctrine that before we persist or update we call the updatedTimestamps() function.
         *
         * @ORM\PrePersist
         * @ORM\PreUpdate
         */
        public function updatedTimestamps()
        {
            if ($this->getCreatedAt() == null) {
                $this->setCreatedAt(new \DateTime(date('Y-m-d H:i:s')));
            } else {
                $this->setUpdatedAt(new \DateTime(date('Y-m-d H:i:s')));
            }
        }
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      您的日期必须是有效的 \DateTime,而不是字符串。试试这个:

      $userAdmin->setUpdatedAt(new \DateTime("2014-12-26 21:01:40"));
      

      【讨论】:

      • 谢谢!我错过了“新”标签。
      猜你喜欢
      • 2016-05-18
      • 2017-08-23
      • 2013-06-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2018-03-28
      相关资源
      最近更新 更多