我是 Doctrine 的初學者,我陷入了試圖在 2 個物體之間建立連接表的回圈中。
我顯然在“火車”和“容器”之間有 OneToMany 關系,在“容器”和“火車”之間有 ManyToOne 關系。
我在 OneToMany 關系上放置了注釋,如下所示:
@ORM\Entity/Train
@ORM\OneToMany(targetEntity=Container::class, mappedBy="Train")
@ORM\JoinTable(name="train_container",
@ORM\joinColumns={@JoinColumn(name="id_tm", referencedColumnName="id_tm", nullable=false)},
@ORM\inverseJoinColumns={@JoinColumn(name="id_container", referencedColumnName="id_container", nullable=false)})
)
private $Container;
在 ManyToOne 上,我確實這樣做了:
@ORM\Entity/Container
@ORM\ManyToOne(targetEntity=Train::class, inversedBy="Containers")
@ORM\JoinColumn(name="id_tm", referencedColumnName="id_tm")
private $Train;
現在,如果我讓它這樣,我有一個錯誤說:
不允許在屬性 App\Entity\Train::$container 上宣告注解 @ORM\joinColumns。您只能在以下代碼元素上使用此注釋:PROPERTY。
如果我洗掉 joinColumn 并把這個:
@ORM\ManyToOne(targetEntity=Train::class, inversedBy="Container")
private $Train;
我有這個錯誤:
無法決議類“App\Entity\Train”的列“id”的型別
我不知道為什么它顯示一個“id”列,因為列的名稱和“Train”上的屬性總是到處都是“id_tm”。
誰能告訴我我做錯了什么?
非常感謝提前M
編輯以在 id 的屬性上添加代碼:
@ORM\Id
@ORM\GeneratedValue
@ORM\Column(type="integer", name="id_container")
private $id_container;
@ORM\Id
@ORM\GeneratedValue
@ORM\Column(type="integer", name="id_train")
private $id_train;
uj5u.com熱心網友回復:
在Train物體上,您需要使用ManyToMany帶有引數的注釋unique來獲取OneToMany關聯,如doctine 檔案中所示。
這是對我有用的代碼,試試這個:
訓練物體
/**
* Class Train
* @package App\Entity
* @ORM\Entity()
* @ORM\Table(name="train", options={"comment":"Train"})
*/
class Train
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id_train", type="integer", unique=true)
*/
private int $id_train;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Container", mappedBy="Train", cascade={"persist"})
* @ORM\JoinTable(name="train_container",
* joinColumns={@ORM\JoinColumn(name="train_id", referencedColumnName="id_train")},
* inverseJoinColumns={@ORM\JoinColumn(name="container_id", referencedColumnName="id_container", unique=true)}
* )
*/
private $Container;
public function __construct() {
$this->Container = new ArrayCollection();
}
//....
另外,如果要在Container和Train物體之間建立雙向關系,則需要在Container物體中指定以下內容。
容器物體
/**
* Class Container
* @package App\Entity
* @ORM\Entity()
* @ORM\Table(name="container", options={"comment":"Container"})
*/
class Container
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id_container", type="integer", unique=true)
*/
private int $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Train", inversedBy="Container")
* @ORM\JoinColumn(name="train_id", referencedColumnName="id_train")
*/
private $Train;
不要忘記在之后生成 getter 和 setter
php bin/console make:entity --regenerate
并更新架構
php bin/console d:s:u -f
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441572.html
