۱۳۹۹/۰۴/۱۹

پایگاه داده ای در سیمفونی 4

Doctrine در سیموفنی 4 ۱۳۹۸/۰۸/۱۷

فریم ورک سیموفنی 4 ابزار مختلفی را برای کار با پایگاه داده ها برای توسعه نرم افزار فراهم کرده است .یکی از این ابزار مفید و کاربردی کتابخانه doctrine است .این کتابخانه تقریبا تمام پایگاه داده های که در php استفاده می شود را پشتیبانی می کند .پایگاه داده های مثل Mysql و PostgrSql و همچنین پایگاه داده ای no sql همانند MongoDb را پشتیبانی میکند.

نکته:برای اتصال به پایگاه داده ها در سیموفنی 3.4 به صفحه پایگاه داده ها در سیموفونی 3.4 مراجعه کنید.

در نسخه های 4 به بالا سیموفنی برخلاف نشخه های پایین تر برای کار با پایگاه داده ها از migration استفاده شده .با استفاده از این ابزار قدرتمند تیم های برنامه نویسی میتوانند شمای دیتابیس را بین اعضای تیم به اشتراک بگذارند.

بطور پیش فرض شما میتوانید از دکترین در برنامه خود استفاده کنید اما اگر بنا به دلایلی این باندل در فریم ورک شما وجود نداشت میتوانید با استفاده از دستورات زیر آنرا ایمپورت کنید .

composer require symfony/orm-pack
 composer require --dev symfony/maker-bundle

برای پیکر بندی و تنظیم اتصالات برنامه به پایگاه داده ها فیل env. را باید ویرایش کنید. و رمز عبور نام کاربری و نام پایگاه دادهای خود را در آن وارد کنید .توجه کنید در بعضی موارد این فیل در IDE ها نمایش داده نمی شود .

# .env (or override DATABASE_URL in .env.local to avoid committing your changes)
# customize this line!
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"
# to use sqlite:
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db"

در صورتی که username یا password یا نام database شما حاوی کارکتر های خاصی مانند (such as +, @, $, #, /, :, *, !) شما باید آنها را انکود کنید .لیست RFC 3986  کارکتر های رزور شده را ببنید و یا از تابع urlencode  برای انکد کردن مقادیر استفاده کنید.

 

با اعمال تنظیمات صحیح در فایل بالا برنامه شما آماده است که با دستور زیر پایگاه داده هایی که در تنظیمات بالا مشخص کردید ایجاد کنید.

php bin/console doctrine:database:create

در ادامه یک جدول فرضی به نام product در دیتابیس خود ایجاد میکنیم .با استفاده از دستور make:entity در comment شما میتوانید کلاس product به همراه فلیدهای مورد نیاز خود ایجاد کنید.بعد از اجرای این دستور با وارد کردن مشخصاتی همچون نام فیلد و یا نوع فیلد اندازه و.. فیلد های این جدول تکمیل میشود.


 php bin/console make:entity

Class name of the entity to create or update:
> Product

 to stop adding fields):
> name

Field type (enter ? to see all types) [string]:
> string

Field length [255]:
> 255

Can this field be null in the database (nullable) (yes/no) [no]:
> no

 to stop adding fields):
> price

Field type (enter ? to see all types) [string]:
> integer

Can this field be null in the database (nullable) (yes/no) [no]:
> no

 to stop adding fields):
>
(press enter again to finish)

بعد از اتمام کار در نرم افزار شما  کلاس src/Entity/Product.php ایجاد شده است.

// src/Entity/Product.php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="integer")
     */
    private $price;

    public function getId()
    {
        return $this->id;
    }

    // ... getter and setter methods
}

توجه داشته باشید یا طی مراحل بالا هنوز جدولی در پایگاه داده های شما ایجاد نشده است در حال حاظر شما یک کلاس product ایجاد کرده اید که در ان نوع فیلد ها و متد های getter و setter در آن تعریف شده است .در مرحله بعد شما جدول product را در پایگاه داده های خود ایجاد میکنید.

برای ایجاد جدول در پایگاه داده های خود در ابتدا دستور زیر را اجرا کنید .

 php bin/console make:migration

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

    SUCCESS!

    Next: Review the new migration "src/Migrations/Version20180207231217.php" Then: Run the migration with php bin/console doctrine:migrations:migrate

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

php bin/console doctrine:migrations:migrate

با استفاده از دستور بالا کلیه فایل های  migration files که در دیتابیس اعمال نشده بود اعمال می شود.و پایگاه داده شما به روز می شود.

بعد از ساخت جدول و کلاس enitity مربوط به آن امکان دارد نیاز به فیلد جدید داشته باشید تا به جدول خود اضافه کنید .در نسخه های پایین تر از 4 سیموفنی از متغییر مربوطه به همرا anntition های ان را در کلاس enitty ایجاد می کردیم و سپس از دستور doctrine:generate:entity برای ایجاد متد های getter و setter استفاده میکردیم ولی در نسخه 4 به بالا دیگر نیاز نیست ابتدا نام فیلد مورد نیاز را در  entity مورد نظر وارد کنیم . با استفاده از  دستور make:entity  به همراه نام enitty مورد نظر میتوان نام فیلد را در کنسول مشخص کرد و getter و setter مربوط به فیلد مورد نظر ساخته میشود .البته در نظر داشته باشید میتوان بصورت دستی هم فیلد های  و متد های getter و setter را تعیین کرد و این ابزار فقط برای بالا بردن سرعت کد نویسی است .

با توجه به مثال بالا برای اضافه کردن فیلد به entity مورد نظر از دستور  make:migration  به شکل زیر استفاده میکنیم .

$ php bin/console make:entity  Product

 

آموزش symfony 4 پایگاه داده ها

همانطور که در تصویر نمایش داده شده بعد از تکمیل مقادیر درخواست شده مانند مراحل بالا با استفاده از دستور  make:migration تغییرات جدید را در کلاس مایگریشن خود ثبت میکنیم.و بعد با استفاده از  دستور  bin/console doctrine:migrations:migrate تغییران جدید را در جدول مورد نظر ثبت میکنیم .


رای :

سیمفونی

symfony-Doctrine

پایگاه داده ها

ارسال نظر
Copyright © All right reserved.