[英]Doctrine Entity Relationship
在創建具有以下實體的產品的類別和相關顏色之間的實體關系時遇到了一些挑戰(盡管我省略了吸氣劑和吸氣劑):
#Product
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProductRepository")
*/
class Product
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var float
*
* @ORM\Column(name="price", type="float")
*/
private $price;
/**
* @var int
*
* @ORM\Column(name="category", type="integer")
*
* Many Products have one category
*
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=false)
*/
protected $category;
/**
* @var int
*
* Many Products have one color
*
* @ORM\ManyToOne(targetEntity="Color", inversedBy="products")
* @ORM\JoinColumn(name="color_id", referencedColumnName="id")
*
* @ORM\Column(name="color", type="integer")
*/
private $color;
}
#Category
/**
* Category
*
* @ORM\Table(name="category")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
*/
class Category
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=170, unique=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="desc", type="string", length=170, nullable=true)
*/
private $description;
/**
* One Category has many products assigned to it
*
* @ORM\OneToMany(targetEntity="Product", mappedBy="category", cascade={"persist"})
*/
private $products;
/**
* Class Constructor
*
* @param None
* @return void
**/
public function __construct()
{
$this->products = new ArrayCollection();
}
}
#Color
class Color{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="color", type="string", length=191, unique=true)
*/
private $color;
/**
* @var string
*
* @ORM\Column(name="code", type="string", length=191, unique=true)
*/
private $hexcode;
/**
* One Color has many products assigned to it
*
* @ORM\OneToMany(targetEntity="Product", mappedBy="color", cascade={"persist"})
*/
private $products;
/**
* Class Constructor
*
* @param none
* @return void
**/
public function _construct(){
$this->products = new ArrayCollection();
}
}
當我跑步時:
* php bin/console doctrine:schema:validate:
我收到錯誤消息:
* The association AppBundle\Entity\Category#products refers to the owning
side field AppBundle\Entity\Product#category which is not defined as
association, but as field.
* The association AppBundle\Entity\Category#products refers to the owning
side field AppBundle\Entity\Product#category which does not exist.
和:
* The association AppBundle\Entity\Color#products refers to the owning side
field AppBundle\Entity\Product#color which is not defined as association,
but as field.
* The association AppBundle\Entity\Color#products refers to the owning side
field AppBundle\Entity\Product#color which does not exist.
我注意到,每當我注釋掉這些行時:
** @ORM\Column(name="category", type="integer")
** @ORM\Column(name="color", type="integer")
上面的錯誤消失了,但是我收到一條新消息,並顯示錯誤消息:
** [Mapping] OK - The mapping files are correct.
** [Database] FAIL - The database schema is not in sync with the current
mapping file.
我可能做錯了什么,對於該學說概念還是陌生的,並且我遵循了文檔。 任何幫助,將不勝感激...
對於原則ORM,關系不是整數,而是實體對象。
從具有關系的所有字段中刪除@ORM\\Column
注釋(在每個實體中)。
然后使用以下命令在開發環境中更新數據庫架構:
php bin/console doctrine:schema:update --force
然后生成一個理論遷移文件以在您的生產服務器上執行
php bin/console doctrine:migrations:generate
根據您的需要更新generetad遷移文件
並以這種方式處決他
php bin/console doctrine:migrations:execute timestampOfTheMigrateFile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.