Проблема с загрузкой отношений в Doctrine ORM

#php #mysql #orm #doctrine

#php #mysql #orm #доктрина

Вопрос:

Я использую Doctrine ORM для PHP, и у меня есть вопрос о загрузке отношений. Кажется, что модель загружает другой набор отношений, основанный на том, как она была загружена, кто-нибудь знает способ обойти это?

Это может немного сбить с толку. Вот пример. Допустим, у нас есть модели A и B с отношением «многие ко многим» — у A есть одна или несколько Bs. В моем наборе данных у меня есть одна запись A, «A1», которая связана с двумя записями B, «B1» и «B2».

Мне нужно загрузить запись A двумя способами, но в обоих сценариях я хочу иметь возможность получать все связанные записи B с помощью $myModelA->B .

Первый сценарий заключается в прямой загрузке «A1». Итак, я бы пошел $myModelA = A_Table->find("A1") , просто. Тогда, когда я перейду $myModelA->B , я смогу увидеть оба «B1» и «B2». Это ожидаемо.

Второй сценарий вызывает проблемы. Я хочу найти все записи A, которые связаны с «B2». Итак, я создаю Doctrine_Query и выполняю соединение между A и B и указываю, что мне нужны записи A, которые связаны с «B2». Теперь я хочу просмотреть свой список записей A, одна из которых «A1». Итак, поскольку у меня есть модель «A1» в $myModelA , такая же, как и в первом сценарии, я ожидаю, что при переходе $myModelA->B я смогу увидеть оба «B1» и «B2».

Но это не тот случай. Я вижу только «B2». Я предполагаю, что это связано с тем, что запрос, который я использовал для извлечения «A1», в первую очередь требовал только записей, связанных с «B2», поэтому затем, когда я возвращаюсь к отношению другим способом, это условие каким-то образом все еще выполняется, и поэтому я могу получить только «B2».

Вопрос в том … как заставить модель во втором сценарии игнорировать предыдущий запрос и загружать все связанные записи в эту модель?

Спасибо!

Комментарии:

1. Можете ли вы предоставить какой-нибудь документированный код, сопоставимый с формой: Отношения ?

Ответ №1:

Я думаю, вы можете вызвать refresh() на A. Убедитесь, что вы вызываете это с true в качестве аргумента, чтобы ваше отношение было обновлено.

 $A1->refresh(true);