[英]Doctrine2 Associations mapping and doctrine annotations
我試圖為我的2個實體設置注釋以便使用連接表。
我有2個表: 用戶和購物車 。
購物車包含用戶ID,其中包含用戶選擇的產品。
1個用戶可以擁有許多產品,因此它是ManyToOne關系。
當我嘗試設置關聯時,我嘗試了很多不同的東西,但沒有一個能夠工作。 現在我有這個:
// ---------------- USER CLASS ------------------- //
/**
* @ORM\Entity
* @ORM\Table(name="user", indexes={@ORM\Index(name="firstname_idx", columns={"firstname"}), @ORM\Index(name="lastname_idx", columns={"lastname"}), @ORM\Index(name="email_idx",columns={"email"})})
*/
class User
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="string", length=100)
*/
public $firstname;
/**
* @ORM\Column(type="string", length=100)
*/
public $lastname;
/**
* @ORM\Column(type="string", length=100, nullable=true)
*/
public $email;
/**
* @ORM\OneToMany(targetEntity="Cart", mappedBy="users")
**/
public $cart;
public function __construct() {
$this->cart = new ArrayCollection();
}
//...
而Cart類:
/**
* @ORM\Entity
* @ORM\Table(name="cart")
*/
class Cart {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="integer", nullable=true)
*/
public $user_id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="cart")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
**/
public $users;
public function __construct() {
$this->users = new ArrayCollection();
}
當我使用這些表的連接執行查詢時,我收到消息: “[語義錯誤]第0行,第84頁'u'附近:錯誤:類購物車沒有名為User的關聯”
我的查詢如下所示:
$q = $db->em->createQueryBuilder()
->select('c.*, u.*')
->from("Application\Entity\Cart","c")
->join("c.Application\Entity\User","u")
->getQuery();
我究竟做錯了什么? 如何設置注釋? 我會感激任何幫助。
好吧,我自己想出來了,我又回答了自己的問題。
我花了幾天時間試圖修復注釋。 但真正的問題出在查詢中。
我試圖加入實體,因為我一直在Doctrine1中這樣做。 但是在Doctrine2中,當您連接表時,必須使用在實體中定義的參數作為連接參數進行連接。 所以在我的情況下它將是:
$q = $db->em->createQueryBuilder()
->select('c, u')
->from("Application\Entity\Cart","c")
->join("c.users","u")
->getQuery();
對於習慣使用doctrine1的人來說,這很棘手......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.