gpt4 book ai didi

Symfony2 应用程序/控制台不为实体关系/关联生成属性或模式更新

转载 作者:行者123 更新时间:2023-12-05 01:37:20 25 4
gpt4 key购买 nike

我正在阅读 Symfony2 书中关于使用数据库和教义 (http://symfony.com/doc/2.0/book/doctrine.html) 的代码并按照代码进行操作。我已经到达“实体关系/关联”部分,但该框架似乎没有按照预期的方式进行。我已将 protected $category 字段添加到 Product 实体并将 $products 字段添加到 Category 实体。我的产品和类别实体如下:

产品:

<?php

namespace mydomain\mywebsiteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

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

/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255)
*/
private $description;

/*
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;

/**
* Set description
*
* @param string $description
* @return Product
*/
public function setDescription($description)
{
$this->description = $description;

return $this;
}

/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}

类别:

<?php

namespace mydomain\mywebsiteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use \Doctrine\Common\Collections\ArrayCollection;

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

/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255)
*/
private $description;

/*
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;

public function __construct(){
$this->products = new ArrayCollection();
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set description
*
* @param string $description
* @return Category
*/
public function setDescription($description)
{
$this->description = $description;

return $this;
}

/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
}

根据文档,如果我现在执行

$ php app/console doctrine:generate:entities mydomain

框架应为 Product 中的新类别字段和 Category 中的新产品字段生成 getter/setter。

但是 当我运行命令时,它应该会更新实体但不会添加属性。我与备份(~)文件进行了比较,没有差异。如果我添加另一个字段(例如 description2)并为持久性添加原则注释,那么它会生成属性。我一开始忽略了这一点,手动添加了映射字段的属性,然后执行:

$php app/console doctrine:schema:update --force

为其添加新的关联列。

HOWEVER 它再次告诉我元数据和模式是最新的。

我已经删除了 app/cache/dev 文件夹并允许系统重新创建它,但没有任何区别。

谁能看出为什么框架的行为与文档中描述的不一样?

谢谢

最佳答案

你在这里忘记了一颗星:

/*
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;

一定是

/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;

关于Symfony2 应用程序/控制台不为实体关系/关联生成属性或模式更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com