gpt4 book ai didi

php - 一个查询中的 Symfony2 ManyToMany

转载 作者:行者123 更新时间:2023-11-30 21:58:10 25 4
gpt4 key购买 nike

我有 2 个与 ManyToMany 相关的实体

class Product
{

/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100, unique=true)
*/
private $name;

/**
* @ORM\ManyToMany(targetEntity="ProductTransfer", inversedBy="product")
* @ORM\JoinTable(name="products_transfers")
*/
private $transfers;

第二个

class ProductTransfer
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var int
*
* @ORM\Column(name="stock_from_id", type="integer")
*/
private $stockFromId;

/**
* @var int
*
* @ORM\Column(name="stock_to_id", type="integer")
*/
private $stockToId;

/**
* @var int
*
* @ORM\Column(name="product_id", type="integer")
*/
private $productId;

/**
* @ORM\ManyToMany(targetEntity="Product",mappedBy="transfers")
*/
private $product;

一切都很好,额外的表格是由 Doctrine 创建的。
但是当我尝试从 ProductTransfers 获取所有行时,我在探查器中看到每一行都需要一个包含 2 个连接的查询。
因此,对于 5000 种产品,查询会非常多。

有没有办法像“clean SQL”那样在一个查询中获取它们?如果没有办法用 Doctrine 做到这一点,那么实现它的最佳方法是什么?

喜欢:

SELECT * FROM product_transfer pt
LEFT JOIN products_transfers pts ON pt.product_id=pts.product_id
LEFT JOIN product p ON pts.product_id=p.id;

编辑:在存储库中创建方法

public function loadTransfersByStock($stockId)
{

$q = $this->getEntityManager()
->createQuery(
'SELECT pt,p FROM AppBundle:ProductTransfer pt
LEFT JOIN AppBundle:Product p WITH pt.productId=p.id
WHERE pt.stockToId = :stockId'
);

return $q->setParameter('stockId', $stockId)->getResult();
}

然后结果是

ProductsController.php on line 495:
array:3 [▼
0 => ProductTransfer {#1071 ▶}
1 => Product {#1084 ▶}
2 => ProductTransfer {#1099 ▶}
]

最佳答案

默认情况下,Doctrine 在对象关系中使用延迟加载 - 关系的行仅在您尝试访问它们时加载。如果您知道您将需要所有相关行,请尝试更改为预先获取。

/**
* @ORM\ManyToMany(targetEntity="ProductTransfer", inversedBy="product", fetch="EAGER")
* @ORM\JoinTable(name="products_transfers")
*/

关于php - 一个查询中的 Symfony2 ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358078/

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