【问题标题】:Doctrine2 findBy() on ManyToMany Relationship多对多关系上的 Doctrine2 findBy()
【发布时间】:2014-01-25 14:26:45
【问题描述】:

我有两个实体:以多对多关系链接的项目和课程。

从 Entity\Project.php 中提取

/**
 * @var Course[]
 *
 * @ORM\ManyToMany(targetEntity="Talentec\SdBundle\Entity\Course", inversedBy="projects")
 */
private $courses;

从 Entity\Course.php 中提取

/**
 * @var Project[]
 *
 * @ORM\ManyToMany(targetEntity="Talentec\SdBundle\Entity\Project", mappedBy="courses")
 */
private $projects;

在我的控制器中,我想使用 Doctrine 的 findBy()(或 findByProject())来查找与某个项目相关的所有课程。

是否可以执行以下操作:

$this->getDoctrine()->getRepository('SdBundle:Course')->findBy(array('project' => $projectID));

或:

$this->getDoctrine()->getRepository('SdBundle:Course')->findByProject(project_id);

我认为这是不可能的,因为 Course 上的字段被声明为 $projects(由于多对多关系),而不是 $project。

是否有类似的方法来查找以多对多关系链接的实体?

【问题讨论】:

    标签: symfony doctrine-orm many-to-many


    【解决方案1】:

    【讨论】:

    • 死链接,所以这个答案现在已经过时了。
    • @DerickF 又死了
    • @JulesR 再次修复它。
    【解决方案2】:

    在您的 CourseRespoitory 目录中:src/Respository/CoursRepository.php, 您可以添加简单的函数来返回链接到某个项目的所有课程:

    # src/Repository/CoursRepository
    // .....
    use App\Entity\Project;
    // .....
    
    public function findAllCoursByProject(Project $project)
    {
        return $this->createQueryBuilder('c')
            ->join('c.project', 'p')
            ->where('p = :project')
            ->setParameter('project', $project)
            ->getQuery()
            ->getResult()
        ;
    }

    然后像这样在你的控制器中调用这个函数:

    // ....
    Use App\Entity\Course;
    
    //.....
    
    // in your controller 
    
    $em = $this->getDoctrine->getManager()
    
    $courses = $em->getRepository(Course::class)
                ->findAllCoursByProject($project);

    注意:所以不要忘记验证课程实体的存储库,通常是这样的:

    # src/Entity/Course.php
    
    /**
     *@ORM\Entity(repositoryClass="App\Repository\CourseRepository")
     */
    class Course

    【讨论】:

    • 我认为第一个sn-p的一个小错误:应该是->join('c.projects', 'p')而不是->join('c.project', 'p')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多