PDA

View Full Version : متد های زیر چه کار انجام میدن



engmmrj
یک شنبه 18 خرداد 1393, 10:05 صبح
متد های زیر چه کار انجام میدن

transaction=Yii::app()->db->beginTransaction();
try
{
//.... SQL executions OR model save()
$transaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
$transaction->rollback();

Veteran
یک شنبه 18 خرداد 1393, 10:25 صبح
Transaction میگه که کوئری رو به صورت تضمینی اجرا میکنم.
مثلا دوتا جدول داری، توی اولی ی رکورد درج میکنی و ایدی همون رکورد رو میگیری و درج میکنی توی جدول دوم، اگر بدون این قابلیت باشه، ممکنه توی جدول دوم رکورد ثبت نشه ( به هر دلیلی)
اما اگر با transaction باشه، اگر دوتا عملیات درج با موفقیت اجرا شدن که هیچ، وگرنه هیچکدوم اجرا نمیشه

engmmrj
یک شنبه 18 خرداد 1393, 11:15 صبح
$transaction->commit();
$transaction->rollback();

دو متد دیگر چه کاری اجام میدهند.

MRmoon
یک شنبه 18 خرداد 1393, 11:46 صبح
$transaction->commit();
$transaction->rollback();

دو متد دیگر چه کاری اجام میدهند.

کامیت میگه حالا تغییرات رو ذخیره کن.

رول بک میگه کویری هایی که انجام دادی برگردون.


$transaction=Yii::app()->db->beginTransaction();
try
{
Yii::app()->db->createCommand("INSERT INTO a VALUES ('val')");
Yii::app()->db->createCommand("INSERT INTO b VALUES ('val')");
$transaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
$transaction->rollback();
}

مثلا در مثال بالا اگه اولی رو نتونه ثبت کنه یا مشکلی باشه که هیچی. ولی اگه دومی رو نتونه ثبت کنه اولی که ثبت شده رو هم حذف می کنه.

engmmrj
یک شنبه 18 خرداد 1393, 13:21 عصر
فقط برای createCommad هستش ؟

$transaction=Yii::app()->db->beginTransaction();
try{
$model->save()
$model->save()
$transaction->commit();}catch(Exception $e) // an exception is raised if a query fails{ $transaction->rollback();

MMSHFE
یک شنبه 18 خرداد 1393, 14:05 عصر
بطور کلی هروقت بخواین چندتا کار وابسته به هم باشن و اگه یکیشون انجام نشد، بقیه اونهایی که انجام شده هم برگشت بخوره، از این حالت استفاده میکنید که بهش میگن Transaction یا تراکنش. دستوراتتون رو توی بلاک try میگذارین و آخرش هم commit رو صدا میزنید (تا وقتی commit انجام نشه هیچ چیزی واقعاً توی دیتابیس نوشته نمیشه). توی بلاک catch هم rollback رو صدا میزنید تا اگه هرکدوم با موفقیت انجام نشد، دستوراتی که انجام شده برگشت بخوره.