pauldee
(Pauldeee)
December 3, 2011, 11:13am
1
Допустим есть 3 зависимые AR модели, при создании этих моделей, нужно сделать 3 экземпляра, и по отдельности их передать во вью. После сабмиа, в контроллере собрать их все в одну кучу. Что очень не удобно.
Для редактирования можно применить тот же giix с saveRelated(), но как быть с новой моделью?
Как вариант можно в родительской модели в init прописать добавление пустых связей, что тоже не очень удобно.
Подскажите красивое решение.
Спасибо
pauldee
(Pauldeee)
December 3, 2011, 1:26pm
2
Вот к такому решению я пришел
Структура такова
Categories -< Products -< PropertiesValues
Также таблица Properties, на которую ссылаются Product и PropertiesValues
Product model:
public function init()
{
parent::init();
if ($this->scenario == 'insert') {
$category = Categories::model()->find('', array( 'order'=> 'name DESC'));
$this->category_id = $category->id;
//create new instances of property values
$propertyValues = array();
foreach($category->properties as $property) {
$propertyValue = new PropertiesValues();
$propertyValue->property_id = $property->id;
//product_id is empty
$propertyValues[] = $propertyValue;
}
$this->propertyValues = $propertyValues;
}
}
Save property_values:
public function afterSave()
{
foreach($this->propertyValues as $propertyValue)
{
$propertyValue->product_id = $this->id;
$propertyValue->save();
}
}
In the view
<table>
<?php foreach($model->propertyValues as $propertyValue): ?>
<tr>
<td><?php echo CHtml::encode($propertyValue->property->name) ?></td>
<td><?php echo $form->textField($propertyValue, 'value')?></td>
</tr>
<?php endforeach; ?>
</table>
pauldee
(Pauldeee)
December 3, 2011, 4:43pm
3
Во вью не получатеся получить значение релационной модели
echo CHtml::activeHiddenField($model, 'PropertyValue[' . $key . '][property_id]');
так как в CHtml::resolveValue() есть проверка на массив, а я хочу передать объект
if(is_array($value) && isset($value[$id]))
$value=$value[$id];
Почему такое поведение?
Пришлось использовать отдельно дочернюю модель:
$propertyValueModel = current($model->propertyValue);
echo CHtml::activeHiddenField($propertyValueModel, '[' . $key . ']property_id');