您好,我已经编写了一个代码,可以通过整个数组进行整理,并将图像复制到文件夹并在记录中插入数据。现在有趣的是$model->save()
没有显示错误,它返回true。和程序永远不会进入其他
现在发生了什么循环继续运行并完成其ietration而不会中断。我无法猜出谁错了。因为我大部分时间都是我的机会更大:)
这是代码
protected function saveImage($formData,$model)
{
if ($formData === null)
return;
$idx=0;
foreach($formData['title'] as $image)
{
$model->title = $image;
$file= dirname(Yii::app()->request->scriptFile) . DIRECTORY_SEPARATOR
. DIRECTORY_SEPARATOR .'images\hotelImages'. DIRECTORY_SEPARATOR
. $model->hotel->name;
$model->image = Yii::app()->baseUrl. "/images/hotelImages/".$_FILES['HotelImages']['name'][$idx];//image path
if($model->save())
{
echo $idx.'<br /> it was sucess<br />';
If(file_exists($file))
{
copy($_FILES['HotelImages']['tmp_name'][$idx],$file."/".$_FILES['HotelImages']['name'][$idx]);
}
else
{
mkdir($file);
copy($_FILES['HotelImages']['tmp_name'][$idx],$file."/".$_FILES['HotelImages']['name'][$idx]);
}
$idx++;
}//if there was error
else
{
print_r($model->getErrors());
yii::app()->end();
return FALSE;
}
echo '<br />end reached <br />';
}
yii::app()->end();
return true;
}
$ formdata的var_dump是
array
(
'title' => array
(
'0' => 'title1'
'1' => 'title2'
)
)
无论如何,foreach循环数据库的计数只能获得单行
答案 0 :(得分:4)
save()
方法将记录插入数据库(如果它尚不存在),否则更新相同的数据库记录。
$model
作为方法参数传入,我只是假设其title
属性不是主键。
换句话说,您不断反复更新同一个数据库记录,这就是您只在数据库中看到一条记录的原因。
答案 1 :(得分:0)
@ fivedigit的分析是正确的。我建议的修复方法是降低此方法的复杂性。将所有内容放在foreach
的自己的方法中(例如saveImage
),然后执行以下操作:
foreach($formData['title'] as $image) {
$this->saveImage($image, new Image);
}
这种方法有点超级方法,您可能会发现将其分解为不同的方法更容易。也许使用组件来处理文件复制,而不是填满控制器。
答案 2 :(得分:0)
再一次我错了:)
问题在于每个foreach ietration
$ model
之前是$ model并且没有创建$ model的新瞬间,yii
认为可能是这个Geek正在更新它的旧版本。所以就是it.it在数据库中更新。
$model = new HotelImages;
在填充之前
我感谢fivedigit只是一个想法。
我非常相信这个
大多数人说小知识很危险......这是真的 所有程序员除外。程序员是稀有物种,它需要的是什么 一点点想法/暗示做这件事
答案 3 :(得分:0)
Yii CActiveRecord有一个变量isNewRecord,它的值在创建对象时为true,并且在未调用find或save函数之前保持为true。当模型调用save函数时,isNewRecord设置为false。
所以在你的情况下,你需要在每次调用保存函数之前设置这个变量“isNewRecord”为true,或者每次创建一个新模型都要调用保存函数。
查看代码中的更改::
$model->setIsNewRecord(True); // changes code line
protected function saveImage($formData,$model)
{
if ($formData === null)
return;
$idx=0;
foreach($formData['title'] as $image)
{
$model->setIsNewRecord(True); // for each new record
$model->title = $image;
$file= dirname(Yii::app()->request->scriptFile) . DIRECTORY_SEPARATOR
. DIRECTORY_SEPARATOR .'images\hotelImages'. DIRECTORY_SEPARATOR
. $model->hotel->name;
$model->image = Yii::app()->baseUrl. "/images/hotelImages/".$_FILES['HotelImages']['name'][$idx];//image path
if($model->save())
{
echo $idx.'<br /> it was sucess<br />';
If(file_exists($file))
{
copy($_FILES['HotelImages']['tmp_name'][$idx],$file."/".$_FILES['HotelImages']['name'][$idx]);
}
else
{
mkdir($file);
copy($_FILES['HotelImages']['tmp_name'][$idx],$file."/".$_FILES['HotelImages']['name'][$idx]);
}
$idx++;
}//if there was error
else
{
print_r($model->getErrors());
yii::app()->end();
return FALSE;
}
echo '<br />end reached <br />';
}
yii::app()->end();
return true;
}