Stopper
Stopper

Reputation: 576

Joins symfony 2

I have 3 tables and I use YAML, which is connect to each other like this:

Trainings:

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

Exercises:

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:

I need "exercise name" from table Exercises(basically name coming from exercise_translation, but I think it's not a problem) that related to my Trainings and also I need "sets" from exerciseTrainings table. So I have training and try to join tables:

$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();

But I get this error:

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

Maybe someone has same structures and know how to make it work? Also how to presented values from 2-3 tables in TWIG?

Upvotes: 0

Views: 54

Answers (1)

Pierre
Pierre

Reputation: 782

You doesn't have training_id field in your ExerciseTraining entity so you can't use it in your where clause, in your ExerciseTraining entity you have training field so you can try something like this :

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

Upvotes: 1

Related Questions