Требуется вернуть все работы, которые не были приобретены зарегистрированным пользователем. Все круто, когда у меня много-много связей (например, удаленных заданий, чем я могу использовать член ), которые не требуют дополнительной информации. Но проблема возникает, когда есть отдельная таблица покупок, которая имеет отношения один ко многим с двумя другими таблицами.
Пользователь:
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();
}