【问题标题】:Doctrine2 Associations mapping and doctrine annotationsDoctrine2 关联映射和学说注释
【发布时间】:2013-11-15 17:15:13
【问题描述】:

为了使用连接表,我试图为我的 2 个实体设置注释,这让我很头疼。
我有 2 个表:usercart

购物车包含用户 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();
}

当我使用这些表的连接执行查询时,我收到以下消息: “[语义错误] line 0, col 84 near 'u': Error: Class Cart has no association named User”

我的查询如下所示:

$q = $db->em->createQueryBuilder()
            ->select('c.*, u.*')
            ->from("Application\Entity\Cart","c")
            ->join("c.Application\Entity\User","u")
            ->getQuery();

我做错了什么?如何设置注释? 如有任何帮助,我将不胜感激。

【问题讨论】:

    标签: php doctrine-orm annotations zend-framework2 many-to-one


    【解决方案1】:

    好吧,我自己想通了,我又在回答我自己的问题。

    我花了几天时间尝试修复注释。但真正的问题在于查询。

    我一直在尝试加入实体,因为我在 Doctrine1 中一直这样做。但是在 Doctrine2 中,当您连接表时,您必须使用您在实体中定义的参数作为连接参数进行连接。所以在我的情况下是:

    $q = $db->em->createQueryBuilder()
                ->select('c, u')
                ->from("Application\Entity\Cart","c")
                ->join("c.users","u")
                ->getQuery();
    

    这对于一个习惯于使用学说1的人来说很棘手......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多