مشکل در اضافه کردن رکورد جدید

[rtl]

با سلام.

توی مدل تصاویرم وقتی می خواد متد save را استفاده کنه توی دیتابیس دوتا رکورد خالی اضافه کرده و سپس رکورد اصلی را اضافه می کنه. مشکل چیه؟

[/rtl]


public function actionCreate() {

    	$model = new Picture;


    	if (isset($_POST['Picture'])) {

        	$rnd = rand(0, 9999);

        	$model->attributes = $_POST['Picture'];


        	$uploadFile = CUploadedFile::getInstance($model, 'address');

        	

        	$model->address = "{$rnd}-{$uploadFile}";

        	

        	if ($model->save() && !empty($uploadFile)) {

                	$uploadFile->saveAs(Yii::app()->basePath . '/../upload/' . "{$rnd}-{$uploadFile}");

            	//$this->redirect(array('view', 'id' => $model->id));

        	}

    	}


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

	}

[rtl]اگه not null کنید همه فیلدها رو چه اتفاقی می افته؟[/rtl]

[rtl]اتفافا اون فیلد های اصلی همه NOT NULL هستند فقط فیلدهایی مثل created و updated نیستند. که فکر نمی کنم مشکلی ایجاد کنند.

اصلا این هم کل ساختار جدولش:[/rtl]


mysql> show columns from `jng_picture`;

+--------------+------------------+------+-----+---------+----------------+

| Field    	| Type         	| Null | Key | Default | Extra      	|

+--------------+------------------+------+-----+---------+----------------+

| id       	| int(10) unsigned | NO   | PRI | NULL	| auto_increment |

| address  	| varchar(500) 	| NO   | 	| NULL	|            	|

| product_id   | int(11) unsigned | NO   | 	| NULL	|            	|

| product_type | smallint(6)  	| YES  | 	| NULL	|            	|

| create_time  | datetime     	| YES  | 	| NULL	|            	|

| update_time  | datetime     	| YES  | 	| NULL	|            	|

| deleted  	| tinyint(1)   	| YES  | 	| NULL	|            	|

+--------------+------------------+------+-----+---------+----------------+

[rtl]اِه! با این شرایط چطوری دو تا رکورد خالی ساخته می شه؟

ممنون.[/rtl]

[rtl]منظور از خالی null نیست. شاید کراکتر space داده.

اگر توی کنترلر دقت کرده باشید. بنده میام یه عدد رندمی را به اول اسم فایل اضافه می کنم. و وقتی save می کنم میاد دوتا رکورد با عدد رندوم ذخیره می کنه بعد یک رکورد با عدد رندوم همراه با نام فایل را ذخیره می کند. وقتی اون عدد رندوم را برداریم دوتا رکورد خالی ذخیره می کند و بعد نام فایل را. برای مثال این نتیجه بعد از اضافه کردن یک رکورد جدید توی دیتابیس است:[/rtl]


mysql> select * from `jng_picture`;

+----+-------------+------------+--------------+---------------------+---------------------+---------+

| id | address 	| product_id | product_type | create_time 		| update_time 		| deleted |

+----+-------------+------------+--------------+---------------------+---------------------+---------+

| 57 | 8720-   	|      	2 |        	1 | 2013-04-27 13:35:10 | 2013-04-27 13:35:10 |	NULL |

| 58 | 3011-   	|      	2 |        	2 | 2013-04-27 13:35:12 | 2013-04-27 13:35:12 |	NULL |

| 59 | 6149-14.jpg |      	2 |        	2 | 2013-04-27 13:35:12 | 2013-04-27 13:35:12 |	NULL |

+----+-------------+------------+--------------+---------------------+---------------------+---------+

3 rows in set (0.00 sec)



[rtl]در این مثال ردیف های ۵۷ و ۵۸ همون دوتا رکورد خالیایی هستند که گفتم.[/rtl]

[rtl]اگه می شه empty($uploaded) رو بیارین اولین condition قبل از &&, ببینید تفاوتی می کنه؟[/rtl]

[rtl]

بیا داداش اصلا اون یک تیکه رو برداشتم ولی هیچ فرقی نکرد.:huh:

[/rtl]

[left]Put a die(); in the If (save) and see if stops saving extra record or not.

خیلی عجیبه اینچیزی که تو میگیری

[/left]

[right]از روی زمان ها هم میشه گفت یک چیزی در زمان های مختلف داره هی ذخیره میکنه

[/right]

[rtl]یعنی چی؟ منظورت از زمانها چیه؟ ممکنه به خاطر متد beforeSave() باشه؟

[/rtl]

آره کد اونم اینجا بذار ببینیم چی توش داری- زمان ها یعنی دو ثانیه طول کشیده بین اولین ذخیره و بعدیش

کد رو حدس و خطا ایراد گیری کنی سریع می فهمی ایرادش کجاست

[rtl]آخه چیزی نداره:[/rtl]


	protected function beforeSave() {

    	if (parent::beforeSave()) {

        	if ($this->isNewRecord) {

            	$this->create_time = $this->update_time = date('Y-m-d H:i:s');

        	} else {

            	$this->update_time = date('Y-m-d H:i:s');

        	}

        	return TRUE;

    	}

    	return FALSE;

	}

[rtl]اون متد را کلا خارجش کردم ولی فرقی نکرد.[/rtl]

"{$rnd}-{$uploadFile}";

به جای این یک رشته ثابت بذار تو همه کدت ببین درست میشه

هم تو آدرس مدل هم تو سیو از

ببخشید من هی حدس و خطا می زنم ولی میگم شاید یکش کار کرد

[rtl]

آقا درست شد. داستان از جایه دیگه آب می خورد. از فعال بودن ajax valifation فرمم. :D;)

[/rtl]

آدم تو زندگی دلش به همینا خوشه :)

[rtl]با عرض پوزش اینها به خاطر عدم تسلط بنده روی فریمورک است.

[/rtl]