تغییر یک رکورد ذخیره شده در Mysql

[font="Tahoma"][rtl][right]

آقا ببنید این مشکل برای چیه؟هرکاری میکنم نمیتونم مشکلُ رفع کنم.

توو table یه سری رکورد دارم که هیچ PRIMARY KEY براش تعیین نشده.من با find() رکورد مورد نظرمو پیدا میکنم وقتی میخوام محتویات رکورد رو تغییرش بدم خطا میده.

کدم هم اینه:

[/right]

[/rtl][/font]




<?php

	public function actionUpdate($tb, $id){

		$model = new Database($tb);


		if( isset($_REQUEST["Database"]) ){

			//set CDbCriteria.

			$criteria = new CDbCriteria;

			$criteria->condition = 'ID=:_id';


			$criteria->params = array(":_id"=>$id);

			$r = $model->find($criteria);

			//$r->unsetAttributes();//clear any default values.


			$r->email = $_REQUEST["Database"]["email"];


			$r->update( array('email, name, ID') );

			  

			$this->redirect('view', array('row'=>$r));

		}else{

		    $this->render('update', array('row'=>$model->find("ID='{$id}'"), 'model'=>$model, ));

		}

	}




[font="Tahoma"][right]خطایی هم که میده اینه:

[/right]

The active record cannot be updated because it is new.

[rtl][right]اینم بگم وقتی داخل table یه فیلد PRIMARY KEY تعیین میکنم میتونم با updateByPk محتویات فیلدهارو تغییر بدم.

مشکل کجاست؟ :(

[/right][/rtl][/font]

[rtl]شما خودتون این کد را برای بروز رسانی نوشته اید درسته؟ از Gii استفاده نکرده اید؟

اگر از Gii استفاده کنید یک گزینه دارد به نام CRUD که خودش میاد کنترلر و ویوهای مربوطه را همراه با عملیات create, update و… را ایجاد می کنه. برای اطلاعات بیشتر به این سایت یه سری بزنید:

[/rtl]

http://shgn.ir/یادگیری-فریمورک-yii-بخش-۵/

[size="4"][right]وقتی به صورت دستی میخوای اینکارو بکنی فکر میکنم باید صفت

IsNewRecord

در

CActiveRecord

را خودت ست کنی[/right][/size]

[rtl]این چه کاریه. به نظرم که تنظیم این مقدار یه صورت دستی اشتباه باشه. فلسفه وجودی اون پراپرتی صرفا برای تشخیص این هست که این رکورد جدید است یا قبلا وجود داشته که در خیلی از جاها کاربرد دارد. این پراپرتی را خود AR مدیریت و تنظیم می کند.

[/rtl]

[right]

متد

save()

این صفت رو مدیریت میکنه

ولی

update()

فقط اونو چک میکنه[/right]