ورود

View Full Version : تغییر مقدار آرایه درون یک object (حل شد)



engmmrj
یک شنبه 16 آذر 1393, 14:22 عصر
من یک object دارم که درون این object یک آرایه هست و میخواستم مقدار این آرایه رو تغییر بدم ولی اررو میده !

$model->expire[1] = 02
Indirect modification of overloaded property Product::$expire has no effect

MMSHFE
یک شنبه 16 آذر 1393, 16:30 عصر
احتمالاً با & یک کپی ارجاعی درست کردین. & رو بردارین تا مشکل برطرف بشه. اگه اینطور نیست کد کامل رو بگذارین (از زمان مقداردهی و درصورت نیاز کد مدل) تا مشکل رو رفع کنیم. ضمناً تاپیک رو در بخش Yii ایجاد کنید.

engmmrj
یک شنبه 16 آذر 1393, 19:22 عصر
احتمالاً با & یک کپی ارجاعی درست کردین. & رو بردارین تا مشکل برطرف بشه. اگه اینطور نیست کد کامل رو بگذارین (از زمان مقداردهی و درصورت نیاز کد مدل) تا مشکل رو رفع کنیم. ضمناً تاپیک رو در بخش Yii ایجاد کنید.
خود yii مدیریت می کنه من چیزی نگذاشتم .

public function actionCreate()
{
$model=new Product;

// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);

if(isset($_POST['Product']))
{
$model->attributes=$_POST['Product'];

$model->file=CUploadedFile::getInstance($model,'file');

if($model->validate()) {

$dir = getcwd().'/uploads/';
$lastId = Product::model()->find(array('order' => 'id DESC'));
$lastId = $lastId == NULL ? 1 : $lastId->id;
$fileName = $lastId.'_'.md5(microtime()*98231.222).'.'.$model->file->extensionName;
$model->image = $fileName;



$mode->expire[1] = $this->_pasteZiroToDate($model->expire[1]);
$mode->expire[2] = $this->_pasteZiroToDate($model->expire[2]);

$model->expire = implode('-', $model->expire);
}
if($model->save()) {
$model->file->saveAs($dir.$fileName);

foreach($model->cat as $key => $cat) {
Yii::app()->db->createCommand()->insert('{{product_cat}}', array('product_id'=> $model->id, 'cat_id' => $cat));
}

$this->redirect(array('admin'));
}
}

$this->render('create',array(
'model'=>$model,
));
}



<?php echo $form->dropDownList($model, 'expire[]', array_combine(range(Yii::app()->jdate->date('Y'), Yii::app()->jdate->date('Y')+10), range(Yii::app()->jdate->date('Y'), Yii::app()->jdate->date('Y')+10)));?>
<?php echo $form->dropDownList($model, 'expire[]', array_combine(range(1, 12), range(1, 12)));?>
<?php echo $form->dropDownList($model, 'expire[]', array_combine(range(1, 31), range(1, 31)));?>

MMSHFE
دوشنبه 17 آذر 1393, 08:33 صبح
خوب شما الان mode$ نوشتین نه model$ و ضمناً ساختار دستیابهای خودکار get و set توی ActiveRecord در Yii به نحوی پیاده سازی شده که اجازه ایجاد فیلدهای خودکار رو نمیده و حتماً باید توی Schema در دیتابیس وجود داشته باشن. دقیقاً بگین چه کاری میخواین انجام بدین تا راهش رو خدمتتون بگم.

engmmrj
دوشنبه 17 آذر 1393, 09:57 صبح
اینجوری درستش کردم.

public function actionCreate()
{
$model=new Product;

// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);

if(isset($_POST['Product']))
{
$model->attributes=$_POST['Product'];

$model->file=CUploadedFile::getInstance($model,'file');

if($model->validate()) {

$dir = getcwd().'/uploads/';
$lastId = Product::model()->find(array('order' => 'id DESC'));
$lastId = $lastId == NULL ? 1 : $lastId->id;
$fileName = $lastId.'_'.md5(microtime()*98231.222).'.'.$model->file->extensionName;
$model->image = $fileName;

$date = array($model->expire[0], $this->_pasteZiroToDate($model->expire[1]),$this->_pasteZiroToDate($model->expire[2]));
$model->expire = implode('-', $date);
}
if($model->save()) {
$model->file->saveAs($dir.$fileName);

foreach($model->cat as $key => $cat) {
Yii::app()->db->createCommand()->insert('{{product_cat}}', array('product_id'=> $model->id, 'cat_id' => $cat));
}

$this->redirect(array('admin'));
}
}

$this->render('create',array(
'model'=>$model,
));
}