Doctrine 2 конструктор запросов многие ко многим с присоединением к таблице выбора - PullRequest
0 голосов
/ 21 марта 2019

Требуется вернуть все работы, которые не были приобретены зарегистрированным пользователем. Все круто, когда у меня много-много связей (например, удаленных заданий, чем я могу использовать член ), которые не требуют дополнительной информации. Но проблема возникает, когда есть отдельная таблица покупок, которая имеет отношения один ко многим с двумя другими таблицами.

Пользователь:

class User
{
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Job", inversedBy="removedUsers")
     * @ORM\JoinTable(name="users_removed_jobs",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="job_id", referencedColumnName="id")}
     *      )
     */
    private $removedJobs;

    /**
     * @OneToMany(targetEntity="App\Entity\Purchase", mappedBy="user")
     */
    private $purchases;
}

Работа:

class Job
{
    /**
     * @OneToMany(targetEntity="App\Entity\Purchase", mappedBy="job")
     */
    private $purchases;
}

Покупка:

class Purchase
{

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Job", inversedBy="purchases")
     * @ORM\JoinColumn(name="job_id", referencedColumnName="id")
     */
    private $job;
}

JobRepository:

public function getTradesmanJobs(Pagination $pagination)
{
    $qb = $this->createQueryBuilder("j")
        ->from('App\Entity\User', 't')->where('t = :user')->setParameter('user', $this->user)
        ->where('j not member of t.removedJobs')
        /*->where('t.purchases not member of j.purchases')*/;

    return $qb->getQuery()->getResult();
}
...