Я полагаю, что вы переосмысливаете это.
Вы можете получить ссылки профиля сущности через определенное отношение ссылок .
Я предполагаю, что ваш класс профиля выглядит следующим образом:
use Doctrine\ORM\Mapping as ORM;
class Profile
{
/**
* @var integer
*
* @ORM\Column(name="user_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Link")
* @ORM\JoinTable(name="profile_link",
* joinColumns={@ORM\JoinColumn(name="profile_user_id", referencedColumnName="user_id")},
* inverseJoinColumns={@ORM\JoinColumn(name="link_id", referencedColumnName="id")}
* )
**/
protected $links;
public function getLinks()
{
return $this->links;
}
Вы можете достичь того, что вы хотите, путем:
- загрузки объекта профиля
- получения связей отношения
- прохождение через возвращенную коллекцию, которая в зависимости от режима извлечения отношений (нетерпеливый, ленивый или сверхленивый) приведет к извлечению сущностей, если они еще не извлечены из вышеприведенного шага.
В вашем контроллере просто выполните:
$profile = $em->getRepository('AppBundle\Entity\Profile')->find(1);
$links = $profile->getLinks();
foreach($links as $link) {
echo $link->getId();
}
Таким образом, будут выполнены 2 запроса:
1) Извлечь строку профиля, например:
SELECT t0.user_id AS user_id_1 FROM profile t0 WHERE t0.user_id = ?
2) Чтобы получить связанные ссылки, например:
SELECT t0.id AS id_1 FROM link t0 INNER JOIN profile_link ON t0.id = profile_link.link_id WHERE profile_link.profile_user_id = ?
В последнем запросе присоединяется только таблица сопоставления , а не таблица профилей.Возвращенные строки не содержат данных профиля.