Symfony 2.7 — колонка не найдена — отношение многие ко многим

Проблема: я пытаюсь связать все компании, связанные с пользователем, указав идентификатор пользователя в своем запросе.

Ошибка, которую я получаю:

CRITICAL - Uncaught PHP Exception Doctrine\DBAL\Exception
\InvalidFieldNameException: "An exception occurred while executing 'SELECT
t0.id AS id_1, t0.name AS name_2, t0.phone AS phone_3, t0.fax AS fax_4,
t0.country AS country_5, t0.address AS address_6, t0.zipcode AS zipcode_7,
t0.state AS state_8, t0.city AS city_9, t0.notes AS notes_10 FROM company t0
WHERE company_representatives.user_id = ?' with params [177]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'company_representatives.user_id' in 'where clause'" at C:\wamp64
\www\Portail\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver
\AbstractMySQLDriver.php line 71

У меня есть сущность «Компания», которая имеет отношение ManyToMany с моей сущностью «Пользователь»

Company.php

 /**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Dbm\UserBundle\Entity\User")
* @ORM\JoinTable(name="company_representatives")
*/
private $representatives;

User.php не имеет отношения к Компании в своем классе сущностей.

Из-за моего отношения ManyToMany у меня есть company_representatives таблица, которая содержитИдентификатор компании» а также «Идентификатор пользователя«

Приведенный ниже код вызывает ошибку «Столбец не найден».

$companies = $em->getRepository('DbmPortalBundle:Company')->findBy(array('representatives' => $user->getId()));

-Кэш был очищен

-[Mapping] и [Database] = ОК при использовании доктрины: схема: проверка

-Я создаю экземпляры представителей как ArrayCollection в моем конструкторе

РЕДАКТИРОВАТЬ

Я использовал обходной путь, который пока что сработает. Я явно хочу исправить это позже. Мой обходной путь — использовать сырой SQL непосредственно в моей таблице «company_represenlatives», чтобы найти идентификатор всех компаний, связанных с моим user_id. После этого я могу использовать «FindBy» с их идентификатором в репозитории моей компании, чтобы получить объекты всех компаний.

1

Решение

Вы не можете использовать findBy(или любые методы поиска) с Много ко многим отношение (возможно, оно будет поддерживаться в будущем).
Ваше состояние правильно построеноГДЕ company_represenlatives.user_id =? ‘ с параметрами [177]«по доктрине, но не добавлено соединение с company_represenlatives.

Что вы хотите, чтобы получить все компании одного пользователя, я бы предложил добавить отношение к сущности пользователя также:

/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Company", inversedBy="representatives")
* @ORM\JoinTable(name="company_representatives")
*/
private $companies;

public function __construct()
{
$this->companies = new ArrayCollection();
}

public function getCompanies()
{
return $this->companies;
}

Наконец, вы можете получить компании напрямую от пользователя:

$user->getCompanies();
0

Другие решения

Вы инициализируете свою коллекцию ArrayCollection в методе _construct () в Company.php?

// Entity/Company.php

public function __construct() {
$this->representatives = new \Doctrine\Common\Collections\ArrayCollection();
}

...

Смотрите документацию к доктрине Вот.

0

Попробуйте php app / console доктрина: схема: обновление —force

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector