How to get an id without join in doctrine2?

霸气de小男生 提交于 2020-01-10 09:45:27

问题


I have entity like this:

/**
 *
 * @Table(name="table")
 * @Entity
 */
 class Table {

    /**
     * @Column(type="integer")
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
     private $id;


    /**
     * @ManyToOne(targetEntity="Entities\Users")
     * @joinColumn(name="userId", referencedColumnName="id")
     */
     private $User;


    /**
     * @Column(type="string")
     */
     private $text;


}

If i do $q->getQuery()->getSingleResult()->getUser()->getUserId()

doctrine generate query like:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100

but if i don`t need table users, how to get an userId.

In pure SQL i can just

SELECT * FROM table WHERE id = 100

and get userId without join users table.


回答1:


You may also want to look at the IDENTITY() function (Doctrine version >2.2).

Example:

SELECT IDENTITY(t.User) AS user_id from Table

Should return:

[ ['user_id' => 1], ['user_id' => 2], ... ]

See also: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions




回答2:


Try this:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);



回答3:


According to the documentation, D2 entities should never need the foreign key exposed as it is all done internally by the mapping information, however, as you have found out, there is a need now and then to have this value. To do this, simply supply the mapping info for the foreign key.




回答4:


I don't know doctrine2 but from what I read this is a ORM. So I would suggest that you need a form of lazy loading where user isn't loaded. This article suggests that lazy loading is available in doctrine2.

This may result in multiple db calls if user is later used on the returned table. You have to weigh this up with the idea of grabbing the data in one hit.



来源:https://stackoverflow.com/questions/3913150/how-to-get-an-id-without-join-in-doctrine2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!