Symfony 2, как сохранить объекты таблицы соединения?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Symfony 2, как сохранить объекты таблицы соединения?

Сообщение Anonymous »

Это настолько тривиальная проблема, что я не могу поверить, что не смог найти ответ.

Symfony 2, доктрина 2.1. У меня есть две сущности и одна промежуточная сущность (объединяемая таблица). Пользователь, Pref и UsersPrefs. Таблица Pref — это таблица словаря, поэтому я могу изменить имя pref только в одном месте. Хорошо, давайте посмотрим картинку:

инфографика http://dl.dropbox.com/u/22495762/infographic.png

Как видите, я хочу иметь группу флажков со всеми возможными вариантами (предпочтениями) и предпочтительными вариантами. Итак, если есть 3 настройки и только 2 выбраны пользователем, должно быть 3 флажка, 2 выбраны.

Это просто, если сделать простой PHP-запрос к базе данных. дважды, чтобы получить список всех настроек и пользовательских настроек, отобразить флажки в зависимости от значений, добавить некоторые действия для обработки отправки формы, готово.

Но ради бога, я могу не заставить это работать, используя симфония и доктрина. Мне удалось дойти до того, что я могу обновлять отношения в доктрине и далее в базе данных, но для этого я использую необработанные значения запроса:

Код: Выделить всё

$data = $request->request->get('some_form');
и это, мол, не так надо делать?

Более того, я совсем застрял относительно того, как мне отображать список флажков. Я либо получаю список всех параметров, ни один из которых не выбран, либо только параметры пользователя, все проверены. Или набор результатов «объединенный слева» с флажками для всех случаев, в любом случае бесполезно.

Я дошел до того, что попытался перегрузить шаблон флажка ветки, но не смог не передал переменные в шаблон формы, и это было последней каплей...

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

Таким образом я получаю группу флажков, не связанных с пользователем выбор:

Код: Выделить всё

->add('prefs', 'entity', array(
'class' => 'Some\TestBundle\Entity\Pref',
'expanded' => 'true',
'multiple' => 'true',
'property' => 'name'
))
И таким образом я получаю только выбор пользователя, все проверено:

Код: Выделить всё

->add('prefs', 'entity', array(
'class' => 'Some\TestBundle\Entity\UserPrefs',
'multiple' => 'false',
'expanded' => 'false',
'property' => 'pref.name',
'query_builder' => function(EntityRepository $er) use ($id) {
return $er->createQueryBuilder('u')
->where("u.user = :id")
->setParameter('id', $id)
;
},

))
И я пробовал левые соединения и другие параметры, но в лучшем случае я мог получить список всех возможных вариантов для всех возможных пользователей, проверенных соответствующим образом.

РЕДАКТИРОВАТЬ (ВОЗМОЖНОЕ РЕШЕНИЕ):

Я показываю группу флажков:

Код: Выделить всё

->add('pref_ids', 'choice', array(
'choices'   => array(
'1'   => 'pref one',
'2' => 'pref two',
'3'   => 'pref three',
),
'expanded' => 'true',
'multiple' => 'true'
))
Я добавил массив $pref_ids в сущность «Пользователь». Теперь мне просто нужно установить значения в массиве в соответствии с предпочтениями, выбранными пользователем:

Код: Выделить всё

public function setPrefIds()
{
$prefs = $this->getPrefs();
$this->pref_ids = array();
foreach($prefs as $pref){
array_push($this->pref_ids, $pref->getPref()->getId());
}
return $this;
}
Таким образом я проверяю соответствующие флажки.

Запись значений в базу данных — это обратный процесс. Я получаю входные значения по запросу:

Код: Выделить всё

$data = $request->request->get('edit_form');
var_dump($data['pref_ids']);
Удаление всех пользовательских настроек:

Код: Выделить всё

foreach ($userPrefs as $pref){
$em->remove($pref);
}
И установка актуальных ассоциаций в доктрине из идентификаторов:

Код: Выделить всё

$entity->setPrefsById($em, $data['pref_ids']);
Здесь я передаю диспетчер объектов самому объекту, но мне нужно его реорганизовать, потому что в этом случае это выглядит немного неряшливо.
Затем $em->flush(); и всё.

Это лучшее, что я смог придумать. Вероятно, это слишком сложно и нужно делать совершенно по-другому. К сожалению, не удалось найти этот «другой путь».

Подробнее здесь: https://stackoverflow.com/questions/941 ... e-entities
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»