2010-07-24 5 views
1

В настоящее время я расширяю расширение yii-s admin, yiiadmin.yiiadmin - многие-ко-многим в интерфейсе администратора yii-framework

Что бы самый простой способ получить ListBox множественного выбора поля в модели создать точки зрения, что будет отображать многие-ко-многим, например, у меня есть «шарнирный» таблицу, которая содержит эти article- категории, а также таблицы статей и категорий.

У меня уже есть эти отношения, определенные в моделях, и мне даже удалось получить некоторые другие отношения в виде списка, например Author.name, полученное через поле author_id в таблице статей.

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

Это будет, следовательно, несколько записей/строк в сводной таблице Article_Category одним Представление статьи.

В то же время сама таблица статей не содержит поля, которое относится к категории. Таким образом, сводная таблица извлекает атрибут id статьи и связывает ее с категорией (другой моделью/таблицей) категории и делает строку из этого.

Так, к примеру, у меня есть эти таблицы/модели:

Статья >>> Id | название | автор | текст


Категория >>> id | имя | описание


ArticleCategory >>> id | article_id | category_id


И я хочу, чтобы заполнить эту третью сводную таблицу с несколькими строками из множественного выбора ListBox из статьи создать вид/форму yiiadmin (часто через только один представление).

Я также хочу, чтобы автоматически оказывать category.name из таблицы категорий в этой ListBox, надлежащим образом связана к категории Ид s, так что я могу показать имена из категории таблицы, и по выбору & представления заполнить сводную таблицу с идентификатором -s категории (следовательно, не имена)

Возможно ли это, и каково было бы это сделать?

+0

Вы преуспели? интересно узнать, что получилось из этого – Mikelangelo

ответ

1

Попробуйте это расширение более легко сохранить MANY_MANY отношения:
http://www.yiiframework.com/extension/cadvancedarbehavior/
(ИГН-шаблон сбора использует это и предоставляет виджет CRelated создать густонаселенные форму отношений элементов для вас, это работает довольно хорошо, я пытался это: http://www.yiiframework.com/extension/gii-template-collection/)

Это один утверждает, что делать что-то подобное с МНОГИХ-ко-многим: http://www.yiiframework.com/extension/save-relations-ar-behavior/

Кроме того, это довольно легко писать код самостоятельно.Просто запустите CHtml :: listBox с моделями, с которыми он связан, затем в действии итерации через них и добавьте отношения в таблицу «pivot» с помощью простого SQL. Или создайте модель для сводной таблицы, и вы также будете использовать обычные методы save() AR. Вы также можете делать это в событии модели afterSave(), а не в действии контроллера.

+0

Первый ответ, я наткнулся на себя, спасибо. Что касается другого, я рассмотрю его, как только я убежу, что смогу сделать с CadvArBeh .. Во всяком случае, с CAdvancedArBehaviour кажется, что мне нужно изменить имена для нескольких выпадающих списков для многих-ко-многим, чтобы я мог получать и сохранять все они как один массив $ _POST (мне что-то не хватает?) Кажется, что в каждом выпадающем списке много-много, которое вы добавляете в форме ввода, имеет другое имя $ _POST? Как я могу получить значения и сохранить их, если я не знаю, сколько из них и их имена - кроме некоторого громоздкого регулярного выражения, которого я даже не осмеливаюсь) –

+0

В любом случае, я знаю, что могу сделать это вручную, как вы предлагаете, но я пытаюсь найти простые способы автоматизации, так как это довольно Основная задача, я думаю, я, вероятно, буду делать снова. Еще одна вещь - есть способ установить макет для всех представлений в модуле (а не в приложении), так что мне не нужно снова устанавливать переменную $ layout для всех представлений модулей? –

+0

Если я правильно понимаю ваш первый комментарий, да, это делает POST-переменную имени соответствующей модели. Возможно, вам придется взломать расширение, чтобы изменить это. Затем, если вы к этому, вы, вероятно, можете переопределить setAttributes для получения этих POST-варов, поэтому это всего лишь один прозрачный вызов $ model-> attributes = $ _POST ['model']. Это было бы неплохо. Удачи! О вашей второй вещи: посмотрите демоверсию Blog на примере расширения CController, чтобы добавить макет по умолчанию $. Тогда просто все контроллеры в вашем модуле расширят ваш новый контроллер с макетом по умолчанию. Работает очень хорошо. Ура! – thaddeusmt

 Смежные вопросы

  • Нет связанных вопросов^_^