我有两个实体:项目和课程在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