加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Doctrine2不会保留某些字段

发布时间:2020-12-13 16:19:46 所属栏目:PHP教程 来源:网络整理
导读:几分钟前,我在Doctrine2中发现了一个错误. 我在我的实体中添加了一些字段,然后刷新mysql表并继续前面我注意到新数据没有存储在表中. 尝试var_dump“ – getXXX()”的值,结果是正确的. 这是使用的代码: $user-setName($name);$user-setSurname($surname);if(
几分钟前,我在Doctrine2中发现了一个错误.

我在我的实体中添加了一些字段,然后刷新mysql表并继续前面我注意到新数据没有存储在表中.

尝试var_dump“ – > getXXX()”的值,结果是正确的.

这是使用的代码:

$user->setName($name);
$user->setSurname($surname);

if($country)
   $user->setCountry($country->getId());

//New code 

if($province > 0)
    $user->setProvince($province);

if($town > 0)
    $user->setTown($town);

var_dump($user->getProvince(),$user->getTown()); //Works OK

$em->persist($user); // Only persists values before Province.
$em->flush();

感谢致敬!

编辑

有关我的实体的信息:

class Users
{
    /**
     * @var integer $id
     *
     * @ORMColumn(name="id",type="bigint")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORMColumn(name="name",type="string",length=50)
     */
    private $name;

    /**
     * @var string $surname
     *
     * @ORMColumn(name="surname",length=95)
     */
    private $surname;

    /**
     * @var string $mail
     *
     * @ORMColumn(name="mail",length=80,unique=true)
     */
    private $mail;

    /**
     * @var string $password
     *
     * @ORMColumn(name="password",length=255)
     */
    private $password;

    /**
     * @var $country
     *
     * @ORMColumn(name="country",type="integer")
     */
    private $country;

    /**
     * @var $province
     *
     * @ORMColumn(name="province",type="integer")
     */
    private $province;

    /**
     * @var $town
     *
     * @ORMColumn(name="town",type="integer")
     */
    private $town;
}

国家,省和城镇是来自同名表的id.我试图用ManytoOne协议改变字段的类型,但它在Doctrine2生成的SQL上得到了一个错误.它似乎是一个缓存错误,但我无法解决它.

解决方法

关于Doctrine协会如何运作,您需要学习很多东西.我建议花一些时间,真正阅读 Doctrine mapping documentation.

您的用户实体不应该使用这样的整数.你可能想要一个ManyToOne关系(意思是:每个用户可以只有一个国家和一个省).您应该开始将事物视为对象并尽量不要传递ID

例如:

/**
 * @ORMManyToOne(targetEntity="Country")
 * @ORMJoinColumn(name="countryId",referencedColumnName="id")
 */
private $country;

/**
 * @ORMManyToOne(targetEntity="Province")
 * @ORMJoinColumn(name="provinceId",referencedColumnName="id")
 */
private $province;

每个中的targetEntity应该更改为您调用的实体.

如果您尝试进行这些更改,请确保运行app / console doctrine:schema:update命令以自动更新架构.

然后你可以在你的控制器中执行此操作:

$country = new Country('US');
$entityManager->persist($country);
$user->setCountry($country);

注意:我没有将国家ID分配给setCountry()方法.我传入了实际的Country对象.这只是一个示例,在您的实际控制器中,此处的$country变量将通过表单传递或从数据库中提取等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读