2017-04-07 83 views
0

我有3个表和我使用YAML,这是相互连接是这样的:加入symfony的2

培训:

oneToMany: 
     exerciseTrainings: 
      targetEntity: ExerciseTraining 
      mappedBy: training 
      cascade: ["persist", "merge"] 
      joinColumn: 
       name: id 
       referencedColumnName: training_id 

锻炼:

oneToMany: 
    exerciseTrainings: 
     targetEntity: ExerciseTraining 
     mappedBy: exercise 
     cascade: ["persist", "merge"] 
     joinColumn: 
      name: id 
      referencedColumnName: exercise_id 

trainingExercises:

manyToOne: 
    exercise: 
     targetEntity: Exercise 
     inversedBy: exerciseTrainings 
     joinColumn: 
      name: exercise_id 
      referencedColumnName: id 
    training: 
     targetEntity: Training 
     inversedBy: exerciseTrainings 
     joinColumn: 
      name: training_id 
      referencedColumnName: id 

exerciseTraining table:

我需要锻炼表格中的“锻炼名称”练习(基本上来自exercise_translation的名字,但我认为这不是问题),这与我的训练有关,而且我需要从exerciseTrainings表中“设置”。所以我有训练,并尝试连接表:

$training = $em->getRepository('TrenkaTrainingBundle:Training')->findOneByAlias($alias); 

$exercises = $em 
    ->getRepository('TrenkaTrainingBundle:Exercise') 
    ->createQueryBuilder('e') 
    ->innerJoin('e.exerciseTrainings', 't') 
    ->where('t.training_id = ' . $training->getId()) 
    ->getQuery() 
    ->getResult(); 

但我得到这个错误:

Class TrainingBundle\Entity\ExerciseTraining has no field or association named training_id

也许有人有相同的结构,并知道如何使它发挥作用?另外如何在TWIG中提供2-3个表格的值?

回答

1

你没有training_id场在ExerciseTraining实体,所以你不能你的where子句中使用它,在你ExerciseTraining实体必须培训场,所以你可以尝试这样的事情:

$exercises = $em 
    ->getRepository('TrenkaTrainingBundle:Exercise') 
    ->createQueryBuilder('e') 
    ->innerJoin('e.exerciseTrainings', 'et') 
    ->where('et.training = :training') 
    ->setParameter('training', $training) 
    ->getQuery() 
    ->getResult(); 
+0

感谢的答案,但它得到 错误:字符串应为结束,得到了“” – Stopper

+0

哇!感谢它的工作。我得到的树枝名{%用于锻炼锻炼%} {{exercise.name}}但是,如何从树枝exerciseTraining拿到套? – Stopper

+1

什么'{{锻炼。 exerciseTrainings}}'? – Shady