Я столкнулся с чем-то очень, очень странным. Работа в VirtualBox, Ubuntu, Apache2, PHP, MySQL У меня появилось очень странное поведение от одной конкретной модели.Yii очень странно save() поведение
Я хотел добавить возможность ввода нескольких языковых версий одной и той же строки, например название продукта. Я использовал jQuery для создания приятных вкладок с языками и создал временный массив для хранения всей этой информации, использовал виджет CActiveForm для сбора и представления данных.
<?php foreach($languages as $language): ?>
<div id="tab_<?=$language->code?>">
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,"translations[$language->code][name]",array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,"translations[$language->code][name]"); ?>
</div>
</div>
[...]
Так вот как я собираю данные в массив $ translations. Это мой $ переводов массив:
$translations = array(
'name' => 'NewName',
'sub_name' => 'Subname'
);
Тогда я явно присвоить его правильную модель в действии Controler:
[...]
foreach ($translations as $key => $value){
$x = new Translations();
$x->language = $key;
$x->id = $product->id;
$x->name = $value['name'];
$x->sub_name = $value['sub_name']
$x->save();
}
[...]
Теперь есть и другие поля, которые только один для каждого продукта:
[...]
<div class="row">
<?php echo $form->labelEx($model,'something'); ?>
<?php echo $form->textField($model,'something',array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,"something"); ?>
</div>
</div>
И те, которые хранятся просто
$product->save();
Все в аккуратной сделке.
ОДНАКО ....
Что я получаю в результате, как это (объединение по переводам и таблицы продукции):
id name subname something
1 NewN
2 NewName S
3 NewName Subname Som
4 NewName Subname Something
4 записи, когда я добавить только один .... и многое другое текст, который я вложил, создано больше записей. Разделение случайным числом символов, иногда всего 4, иногда до 12. Это повторяемо, но не всегда ... Я полностью ошеломлен этим поведением.
Кто-нибудь когда-либо видел что-либо подобное и может пролить свет на него? Спасибо заранее!
Можете ли вы показать запрос, который вы используете для получения «join on translations and product table», и как/где вы просматриваете результат? – DCoder