关于ManyTomany关系的Doctrine2 Findby()



我有两个实体:项目和课程在Manytomany关系中链接。

从Entity Project.php

提取
/**
 * @var Course[]
 *
 * @ORMManyToMany(targetEntity="TalentecSdBundleEntityCourse", inversedBy="projects")
 */
private $courses;

从实体 Course.php

提取
/**
 * @var Project[]
 *
 * @ORMManyToMany(targetEntity="TalentecSdBundleEntityProject", mappedBy="courses")
 */
private $projects;

在我的控制器中,我想使用该学说的Findby()(或FindByproject()),以查找与某个项目相关的所有课程。

可以执行以下操作:

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

或:

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

我认为这是不可能的,因为当然的字段被称为$projects(由于Manytomany关系),而不是$project

是否有类似的方式查找在Manytomany关系中链接的实体?

只使用存储库函数。

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-with-objects.html#custom-repositories

编辑:更新的链接

在您的courserespoitory中的目录:src/ewssository/coursrepository.php,您可以添加简单的功能以返回链接到某个项目的所有课程:

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

,在这样的控制器中只调用此功能之后:

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

nb:所以不要忘记验证存储库当然,通常是这样:

# src/Entity/Course.php
/**
 *@ORMEntity(repositoryClass="AppRepositoryCourseRepository")
 */
class Course

相关内容

  • 没有找到相关文章

最新更新