#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);