php - Symfony2 理解 Doctrine 查询加入

标签 php mysql symfony doctrine-orm doctrine

所以我可以毫无问题地通过使用正常的 Doctrine 来理解查询,例如:

        $carousel = $em->getRepository('ApplicationSonataMediaBundle:Gallery')->findOneBy(array('name' => 'Carousel'));
        $featureProducts = $em->getRepository('MpShopBundle:Product')->findBy(array('status' => 1, 'special' => 1));
        $newProducts = $em->getRepository('MpShopBundle:Product')->findBy(array('status' => 1), array('id' => 'ASC'), 8);

但是我来到了我的项目部分,在那里我有很多疑问(在我的例子中是 71 个)。我需要使用 Join 来完成它们。但我只是无法理解其中的某些部分...

我正在使用此文档:http://symfony.com/doc/current/book/doctrine.html#joining-related-records

这是查询:

$query = $this->getEntityManager()
    ->createQuery(
        'SELECT p, c FROM AppBundle:Product p
        JOIN p.category c
        WHERE p.id = :id'
    )->setParameter('id', $id);

谁能解释一下这是如何工作的。我不明白字母 p, c 是什么意思。 JOIN 到底发生了什么。我对 sql 查询没有什么经验,因为现在我只需要 symfony2 Doctrine ......我认为这不仅有助于我,而且有助于其他人理解。谢谢!

最佳答案

您的连接查询将返回来自 ProductCategory 这两个实体的结果,结果集将返回产品行,其中产品 ID 与 :id provided parameter and its associated categories , 现在在dql p, c 中select 是你实体的别名 p 指的是Product 实体和 c 指的是您的 category 实体,如果您在查询中有另一个连接,例如 JOIN p.manufactures m 如果您还需要产品制造商,则 dql select 将类似于 SELECT p, c, m..

现在,由于 doctrine 将您的数据库表映射到实体,因此 dql 中的连接部分不涉及 on() 子句,因为它从annotations在您的实体中存在的属性上定义,例如您的 Product 实体应该具有类别关联的映射,例如

/**
 * @ORM\OneToMany(targetEntity="Category", mappedBy="product")
 */
protected $category;

并且您的类别实体将指向产品,例如

/**
 * @ORM\ManyToOne(targetEntity="Product", inversedBy="category")
 * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
 */
protected $product;

有关更多详细信息,请参阅文档 Databases and Doctrine

关于php - Symfony2 理解 Doctrine 查询加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700790/

相关文章:

php - 验证字符串仅包含数字、字母和下划线

php - 代码点火器学说

mysql - 在 Excel 中运行 SQL 查询

PHP/MySQL 资源使用

php - 使用 phinx 迁移库在非主键列上自动递增

php - 尝试访问 bool 类型值的数组偏移量

java - 好处或使用 XML 优于 MySQL,反之亦然?

php - 如何停止正在监听 http ://127. 0.0.1:8000 的 symfony 进程

javascript - 预先设置 CKEditor 的值

forms - Bootstrap 3 : formatted checkboxes with Symfony & Twig