私は非常に、非常に奇妙な何かに遭遇しました。VirtualBox、Ubuntu、Apache2、PHP、MySQLで作業していると、ある特定のモデルから非常に奇妙な動作が発生しました。
同じ文字列の複数の言語バージョン、たとえば製品名を入力する機能を追加したかったのです。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配列です:
$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();
}
[...]
現在、製品ごとに1つしかない他のフィールドもあります。
[...]
<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
1つだけ追加すると4つのレコード....さらにテキストを入力すると、さらに多くのレコードが作成されます。ランダムな数の文字で分割します。4から12までの場合もあります。これは繰り返し可能ですが、常にではありません。私はこの動作に完全に唖然とします。
誰もがこのようなものを見たことがあり、それに光を当てることができますか?前もって感謝します!