Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 第2条原则中关于查询的连接实体_Php_Join_Doctrine Orm_Zend Framework2 - Fatal编程技术网

Php 第2条原则中关于查询的连接实体

Php 第2条原则中关于查询的连接实体,php,join,doctrine-orm,zend-framework2,Php,Join,Doctrine Orm,Zend Framework2,我试图在条令2中的一个高级查询中连接两个实体。我正在使用Zend Framework 2 不幸的是,我很难在我现在所做的事情中找到正反两面 以下是我在ZF2中得到的信息: 我已经构建了一个名为KryuuCategorizer的模块,我将使用该模块对网站上的各种内容进行分类 它附加到名为categorize的事件,该事件将获得实体类型 分类程序有2个实体: Category var id var name var objects Object var id var ent

我试图在条令2中的一个高级查询中连接两个实体。我正在使用Zend Framework 2

不幸的是,我很难在我现在所做的事情中找到正反两面

以下是我在ZF2中得到的信息:

  • 我已经构建了一个名为
    KryuuCategorizer
    的模块,我将使用该模块对网站上的各种内容进行分类
  • 它附加到名为categorize的事件,该事件将获得实体类型
分类程序有2个实体:

Category
  var id
  var name
  var objects

Object
  var id
  var entityName
  var module
  var entityId
  var category
Category->objects
被多通绑定到
Object->Category

然后我需要手动将实体绑定到Object->entityId,我想我应该可以通过在原则2中使用join来做到这一点。 但我不知道从哪里开始,也不知道如何抓住它。
我希望有人能让我开始,并为我指明正确的方向,我看了条令文档,但比我应该的更困惑。

有几种方法可以实现你想要的

1。在关系定义中添加一个
fetch=“EAGER

为此,在
对象的实体定义中添加
fetch=“EAGER”

/** MANY-TO-ONE, OWNING SIDE
 * @var Category
 * @ORM\ManyToOne(targetEntity="Application\Entity\Category", inversedBy="objects", fetch="EAGER")
 * @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=true)
 */
protected $category;
文档和文档中提到了快速加载


2.
对象
存储库中编写一个自定义DQL查询,并执行一个获取连接:

/**
 * Find object using DQL with a category joined.
 *
 * @param int $id
 * @return Building|null
 */
public function findObject($id)
{
    $entityManager = $this->getEntityManager();
    $query = $entityManager->createQuery(
        "SELECT o, c FROM Object o JOIN o.category c WHERE o.id = :id"
    );
    $query->setParameter('id', $id);
    $query->getOneOrNullResult();
}
这些类型的联接在文档中进行了解释。请注意获取联接和常规联接之间的区别


3.或在
对象
存储库中使用Doctrine
QueryBuilder
,以获得相同的结果:

/**
 * Find object using query builder with a category joined.
 *
 * @param int $id
 * @return Building|null
 */
public function findObject($id)
{
    $queryBuilder = $this->createQueryBuilder('o')
        ->addSelect('c')
        ->leftJoin('o.category', 'c')
    }
    return = $queryBuilder->getQuery()->getOneOrNullResult();
}

请注意,如果要获取联接,还需要将
addSelect
条件添加到查询中,否则这是一个常规联接。

@KatsuoRyuu这是否回答了您的问题?很抱歉,等待时间太长,是的,它做得很好!