25
تشکر

Laravel: کار با دیتابیس

Laravel 4

Laravel 4

یکی از مهمترین قسمت‌ها در Laravel، نحوه کار با دیتابیس است. Laravel در این قسمت خیلی خوب عمل کرده و شما از چندین روش میتوانید با دیتابیس کار کنید. در این مطلب با ایجاد عملیات ها، Transaction و کار با کانکشن ها را کار میکنیم.

ما یک دیتابیس به نام l4 و همچنین جدول posts و اطلاعاتی را درون آن ایجاد کردیم.

create table posts ( id bigint AUTO_INCREMENT primary key, title varchar(200), content text);

اطلاعات دسترسی به دیتابیس

ابتدا باید اطلاعات دسترسی به دیتابیس مانند نام دیتابیس و یوزر و پسورد آن را در مسیر app/config و فایل database.php وارد کنید. در آرایه mysql اطلاعات را وارد میکنیم.

'mysql' => array(
  'driver'    => 'mysql',
  'host'      => 'localhost',
  'database'  => 'l4',
  'username'  => 'root',
  'password'  => 'xxxx',
  'charset'   => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix'    => '',
),

اجرای کوئری

چهار عمل select, delete, update و insert توسط کلاس DB و متدهایی با همین نام انجام میشود. برای مثال در کد زیر ما یک select از دیتابیس انجام دادیم.

$id = 3;
$posts = DB::select('SELECT * FROM posts WHERE id = :id', array($id));
return $posts;

در کد بالا ما یک آرایه از اطلاعات دریافت میکنیم. همین کار را میتوانیم برای عمل‌های دیگر نیز انجام داد. فقط کافیست نام متد را تغییر دهید. برای مثال در کد زیر insert را انجام میدهیم.

$title = "Some title";
$content = "Some content";
DB::insert('INSERT INTO posts (title, content) VALUES (? , ?)', array($title, $content));

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

برای انجام عملیات های دیگر مانند حذف جدول یا ایجاد آن و یا تغییر خصوصیات جدول میتوانید از متد statement استفاده کنید.

DB:statement('drop table posts');

Database Transaction

زمانی را فرض کنید که باید چندین عملیات پشت سرهم درون دیتابیس انجام دهید، که هر کدام از این عملیات ها به همدیگر وابسته هستند. برای مثال اگر هر کدام از این عملیات ها دچار مشکل شود برای سایت نیز مشکل بوجود می‌آید و حتماً باید این همه عملیات ها با موفقیت انجام شود، یا هیچ کدام از آن‌ها انجام نشود.

برای اینکار باید از Transaction استفاده کرد. برای مثال در کد زیر ما یک Transaction ساختیم. در صورتی که این هر دو عملیات نوشته شده در دیتابیس با موفقیت انجام شود (عمل چک کردن)، لاراول آن‌ها را در دیتابیس اعمال میکند(commit)، اما اگر هر کدام از آن‌ها دچار مشکل شود، هیچ تغییری در دیتابیس ایجاد نمیشود(rollback).

$title = "Some title";
$content = "Some content";
$id = 2;

DB::transaction(function() {
  DB::insert('INSERT INTO posts (title, content) VALUES (? , ?)', array($title, $content));
  DB::delete('DELETE from posts WHERE id = :id', array($id));
});

در کد بالا عملیات های commit و rollback به صورت خودکار انجام میشود. اما میتوان این عملیات را نیز خودمان انجام دهیم. مانند کد زیر:

$title = "Some title";
$content = "Some content";
$id = 2;

DB::beginTransaction();
try 
{
  DB::insert('INSERT INTO posts (title, content) VALUES (? , ?)', array($title, $content));
  DB::delete('DELETE from posts WHERE id = :id', array($id));
} catch(\Exception $e) 
{
  DB::rollback();
  throw $e;
}

DB::commit();

دسترسی به Connection

برای ایجاد چندین کانکشن باید در همان فایل database.php کانکشن جدید را ایجاد کنید. و زمانی که میخواهید کوئری انجام دهید باید مشخص کنید که از کدام دیتابیس میخواهید استفاده کنید. مانند کد زیر:

$users = DB::connection('foo')->select(...);

اگر بخواهید مستقیماً به PDO دسترسی داشته باشید از کد زیر استفاده کنید.

$pdo = DB::connection()->getPdo()

همچنین برای قطع و وصل کردن مجدد کانکشن از کدهای زیر استفاده کنید.

DB::disconnect('foo');
DB::reconnect('foo');

Query Log

لاراول به صورت پیشفرض اطلاعات مربوط به کوئری ها را به عنوان log ذخیره میکند. اگر میخواهید عملیات سنگینی روی دیتابیس انجام دهید، بهتر است ابتدا این کار را غیرفعال کنید.

DB::connection()->disableQueryLog();
این مطلب از سری مطالب، آموزش فریم ورک Laravel است
  • دانیال می‌گه:

    من اطلاعات رو از دیتابیس select کردم.اما چطوری می تونم اطلاعات رو بر اساس نام ستون ها چاپ کنم؟
    لطفا سریع جواب بدین.

    ممنون.

  • رضا می‌گه:

    سلام محسن جان لطفا بیشتر ترفند بزار تو سایتت مثل مطلب “چگونه در مرورگر لاغر شویم” از این مدل ها بزار برامون
    ممنون

  • محسن شفیعی می‌گه:

    ویژگی Transaction خیلی زیباست و باعث میشه از خیلی خطاها جلوگیری بشه.
    ولی شاید یکم سرعت رو پایین بیاره. چون در واقع هر عمل در دیتابیس رو دوبار انجام میدید.


  • نظرات این مطلب بسته است.