shgninc
(Shgninc)
April 27, 2013, 7:42am
1
[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, ));
}
parham
(Parham90)
April 27, 2013, 7:46am
2
[rtl]اگه not null کنید همه فیلدها رو چه اتفاقی می افته؟[/rtl]
shgninc
(Shgninc)
April 27, 2013, 7:57am
3
[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 | |
+--------------+------------------+------+-----+---------+----------------+
parham
(Parham90)
April 27, 2013, 8:08am
4
[rtl]اِه! با این شرایط چطوری دو تا رکورد خالی ساخته می شه؟
ممنون.[/rtl]
shgninc
(Shgninc)
April 27, 2013, 9:06am
5
[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]
parham
(Parham90)
April 27, 2013, 11:09am
6
[rtl]اگه می شه empty($uploaded) رو بیارین اولین condition قبل از &&, ببینید تفاوتی می کنه؟[/rtl]
shgninc
(Shgninc)
April 27, 2013, 11:36am
7
[rtl]
بیا داداش اصلا اون یک تیکه رو برداشتم ولی هیچ فرقی نکرد.
[/rtl]
hesamd
(Hesamd)
April 27, 2013, 12:37pm
8
[left]Put a die(); in the If (save) and see if stops saving extra record or not.
خیلی عجیبه اینچیزی که تو میگیری
[/left]
hesamd
(Hesamd)
April 27, 2013, 12:38pm
9
[right]از روی زمان ها هم میشه گفت یک چیزی در زمان های مختلف داره هی ذخیره میکنه
[/right]
shgninc
(Shgninc)
April 27, 2013, 12:55pm
10
[rtl]یعنی چی؟ منظورت از زمانها چیه؟ ممکنه به خاطر متد beforeSave() باشه؟
[/rtl]
hesamd
(Hesamd)
April 27, 2013, 1:22pm
11
آره کد اونم اینجا بذار ببینیم چی توش داری- زمان ها یعنی دو ثانیه طول کشیده بین اولین ذخیره و بعدیش
کد رو حدس و خطا ایراد گیری کنی سریع می فهمی ایرادش کجاست
shgninc
(Shgninc)
April 27, 2013, 1:30pm
12
[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]
hesamd
(Hesamd)
April 27, 2013, 2:20pm
13
[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}";
به جای این یک رشته ثابت بذار تو همه کدت ببین درست میشه
هم تو آدرس مدل هم تو سیو از
ببخشید من هی حدس و خطا می زنم ولی میگم شاید یکش کار کرد
shgninc
(Shgninc)
April 27, 2013, 2:25pm
14
[rtl]
آقا درست شد. داستان از جایه دیگه آب می خورد. از فعال بودن ajax valifation فرمم.
[/rtl]
hesamd
(Hesamd)
April 27, 2013, 2:42pm
15
آدم تو زندگی دلش به همینا خوشه
shgninc
(Shgninc)
April 27, 2013, 2:56pm
16
[rtl]با عرض پوزش اینها به خاطر عدم تسلط بنده روی فریمورک است.
[/rtl]