Я застрял на чем-то, что, по моему мнению, сводится к моему опыту со многими отношениями.Реализация отношения many_to_many с флажками
В моем заявлении я сопоставляю интересы с продуктами со многими для многих. Я хочу создать следующий сценарий, в соответствии с которым полный список интересов указан в определенном продукте с флажками. Для каждого флажка, выбранного при отправке формы, строка добавляется в таблицу InterestProductAssignment.
В моем контроллере продукта я называю полный список interests-
$interests = Interest::model()->findAll();
На самом деле я не получаю много дальше, чем это, как мой ум в узлах, интересно, куда двигаться дальше. До сих пор я пытался создать массив объектов InterestProductAssignment для соответствия массиву интересов, который я вернул выше. Я пробовал передать его взгляду и создать форму, но я довольно запутался, пытаясь совместить эти два, и я не могу поверить, что правильно использую Yii, поскольку это грязно.
Может ли кто-нибудь определить решение этой проблемы, которое позволит мне установить флажок против всех интересов, которые добавили бы связь между продуктом и процентом при отправке? Мне было бы интересно посмотреть, что вы напишете в контроллере и просмотрите.
Чтобы уточнить, эта страница является предметом только одного продукта.
РАСШИРЕНИЕ
Для дополнительной проблемы у меня, я отправляю код у меня есть, это может также помочь другим реализовать подобную вещь, когда мы находим ошибку.
Мое отношение внутри моего контроллера продукта читается как this-
'interests'=>array(self::MANY_MANY, 'Interest', 'interest_product_assignment(interest_id, product_id)')
контроллер
public function actionUpdate($id)
{
// loadModel as been adapted to be called "->with('interests')"
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Product']))
{
$model->attributes=$_POST['Product'];
if($model->save())
foreach($_POST['ProductInterest'] as $i => $interest_id){
$this_interest = new InterestProductAssignment;
$this_interest->product_id = $model->id;
$this_interest->interest_id = $interest_id;
$this_interest->save();
}
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array(
'model'=>$model,
));
}
Соответствующая часть зрения _form.php
<div class="row">
<?php echo CHtml::checkBoxList('ProductInterest', CHtml::listData($model->interests, 'interest_id', true), CHtml::listData(Interest::model()->findAll(), 'id', 'interest'));?>
</div>
Проблема в том, что второе поле в checkBoxList, похоже, не правильно заполняет флажки, которые уже выбраны. Я подозреваю, что первопричиной этого является, вероятно, глупая ошибка. Я не могу это заметить, и я недостаточно знаком с checkBoxList.
Заранее спасибо.
Это звучит здорово, я буду проверять его. Благодаря! – goose
Еще раз спасибо Зане, это то, что я искал. У меня есть один вопрос. У меня возникли проблемы с заполнением второго аргумента. Если у меня есть идентификатор продукта, как использовать отношение many_many для заполнения массива уже выбранных интересов? – goose
Самый простой способ (я знаю), если просто создать массив ключей => с ключом, являющимся ключом интереса, а значение истинным или ложным (если оно выбрано/уже заинтересовано). Попробуйте: «CHtml :: listData ($ model-> ProductInterests, "interest_id", true) ' –