簡體   English   中英

Doctrine2關聯映射和學說注釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM