gpt4 book ai didi

Symfony2 - 多对多关系和 LIMIT

转载 作者:行者123 更新时间:2023-12-02 16:43:10 27 4
gpt4 key购买 nike

我使用多对多关系;

用户实体;

/**
* @ORM\ManyToMany(targetEntity="Conversation", inversedBy="users")
*/
protected $conversations;

对话实体;

/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="conversations")
* @ORM\JoinTable(name="user_conversation")
*/
protected $users;

什么时候,我工作这个功能;

$user->getConversations();

Symfony 在后台运行此 sql 代码;

SELECT 
t0.id AS id1,
t0.conversationid AS conversationid2
FROM
Conversation t0
INNER JOIN user_conversation ON t0.id = user_conversation.conversation_id
WHERE
user_conversation.user_id = ?

并选择所有对话。这将是性能问题。所以,我使用存储库类。但是,我无法同时使用多对多和限制功能。我应该怎么办?我向存储库类写入什么?

最佳答案

如果您想优化对学说中大型集合的访问,只需使用 Criteria (That only works on OneToMany associations.)

示例:

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Criteria;

/**
* @ORM\Entity
* @ORM\Table
*/
class User
{
....

public function getLatestConversation()
{
$criteria = Criteria::create()
->setMaxResults(10);

return $this->conversations->matching($criteria);
}
}

对于ManyToMany,我认为您必须创建一个自定义查询:

public function getLatestConversations($user)
{
$qb = $this->createQueryBuilder("c");
$qb
->leftjoin("c.users", "u")
->where("u = :user")
->setParameter("user", $user)
->setMaxResults(2);

return $qb->getQuery()->getResult();
}

关于Symfony2 - 多对多关系和 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com