Как получить идентификатор соединения при использовании Doctrine? - PullRequest
0 голосов
/ 30 октября 2019

Я работаю над проектом моей компании. Однако я не знаком с Доктриной. Я являюсь разработчиком запросов в старом стиле.

Таблица-A и Таблица-B находятся в отношении один-ко-многим, связываясь "a_id" в Таблице-B. В Entity-B указывается $ a_name.

Table-A

a_id
a_name
a_attr

Table-B

b_id
a_id
b_name
b_attr

Entity-B

/**
 * @ORM\ManyToOne(targetEntity="EntityA")
 * @ORM\JoinColumn(name="a_id", referencedColumnName="a_id")
 * @var Timezone
 */
protected $a_name;

Сейчас я пишу метод для получения набора записей, используя IN ()

/**
 * @param array $ids
 *
 * @return array
 */
public function getByIds($ids) {
    $query = $this->getEntityManager()->createQuery('SELECT t FROM Entity-B t INDEX BY t.id WHERE t.id IN (:ids)');
}

Вышеуказанные строки "INDEX" и "WHERE" с идентификатором Entity-B. Как я могу "INDEX" и "WHERE" с идентификатором Entity-A (a_id в таблице B)?

Спасибо.

1 Ответ

1 голос
/ 31 октября 2019

Попробуйте это или подобное для вашего DQL:

SELECT a.a_id, t.b_id, t.b_name, t.b_attr FROM Entity-B t LEFT JOIN t.a_name a INDEX BY a.id WHERE a.a_id IN (:ids)

Мы просто добавляем объединение в Entity-A, включаем a.id в выборку и затем индексируем по a.id.

Поскольку мы работаем с сущностями в доктрине, нам нужно присоединиться к сущности, чтобы получить ее идентификатор, а затем проиндексировать ее. Кроме того, наименование ваших свойств в каждой сущности может быть более простым и интуитивно понятным. Поэтому вместо того, чтобы Entity-A (a) имел свойства a_id, a_attr и т. Д., Просто используйте id, attribute и т. Д. Я предполагаю, что вы просто обобщили свой код для вопроса и, возможно, у вас есть более приятные имена свойствв вашем проекте.

Дайте мне знать, как этот DQL работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...