什么是最有效的方式进行搜查到使用上的Symfony 4学说一对多的关系?

问题描述 投票:0回答:1

我有两个实体(用户和产品),一对多的关系。我想检索所有与特定用户通过一个称为“已完成”字段筛选它们产品的实体。我会公布这些实体的相关信息:

用户实体:

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="user")
     */
    private $products;


    ....

产品实体:

/**
 * @ORM\Entity(repositoryClass="App\Repository\Productepository")
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="products")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\Column(type="boolean")
     */
    private $finished;


    ....

我使用下面的代码来过滤我的产品,但是否有其他更有效的方法来做到这一点?

$user = $this->getUser();
$products = $user->getProducts();
$filtered = [];

foreach ($products as $product){
    if(!$product->getFinished()){
        $filtered[] = $product;
    }
}

谢谢你的帮助

symfony doctrine repository symfony4
1个回答
0
投票

解决的办法之一是使用一个数据库查询这样的: - 控制器,你可以做

<?php

namespace App\Controller\ProductController;

use App\Repository\ProductRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

class ProductController extends AbstractController
{
   /**
     * @Route("/products", methods={"GET"}, name="app_get_products")
     * @IsGranted("IS_AUTHENTICATED_REMEMBERED")
     */
    public function listProduct(ProductRepository $repository)
    {
        $user = $this->getUser();
        $products = $repository->findBy([
            'user' => $user,
            'finished' => false
        ]);

        return $this->render('Product/list.html.twig', [
            'products' => $products,
        ]);
    }
}

请注意,由该请求:这是一个解决方案的尝试。

© www.soinside.com 2019 - 2024. All rights reserved.