ایجاد مدل به وسیله gii در Yii2
ایجاد مدل : Model Generator
در این آموزش ما می خواهیم برای جدول ازدیتابیس خود یک مدل ایجاد کنیم:
برای اینکار پس از وارد کردن آدرس ماژول gii اینجا بر روی model generate کلیک کرده .تصویر زیر:
از ابتدا شروع می کنیم به وارد کردن اطلاعات مورد نظرمون:
Generate Model Detailse
Table Name
نام جدول خود را وارد می کنیم .(هنگامی که شما شروع به تایپ می کنید جداول دیتابیس به شما پیشنهاد می شود)
همچنین با hover کردن موس بر روی نام Table Name توضیحات مربوط آن نمایش داده می شود
Model Class
مشخص کردن نام مدل .که زمانی که بر روی تکست باکس کلیک کنید فریم ورک به صورت اتوماتیک به صورت PascalCase نام مدل را ایجاد می کند
برای مثال اگر نام جدول ما article باشد نام مدل ما به صورت Article نمایش داده میشود.
درمورد جداول دوکلمه ای : article_category به این صورت سیستم نمایش می دهد : ArticleCategory
Namespace
این مورد نیم اسپیس کلاسی activerecorde ما را مشخص می کند
به صورت پیش فرض بر روی app\models می باشد .
در نسخه های basic که به همین شکل نوشته می شود .
اما در پروژه های advance این مورد می تواند شامل موارد زیر باشد :
app\models
frontend\models
backend\models
common\models
که بسته به اینکه در کدام نیم اسپیس می خواهید آن را ایجاد کنید قابل تغییر می باشد که
باید به صورت دستی تغییر بدهید.
Bace Class
به صورت پیش فرض بر روی yii\db\ActiveRecord تنظیم میباشد و به این معنی است که مدلی که ایجاد می کنید از چه کلاسی
ارث می بره. در صورتی که کلاس مخصوص به خود را ایجاد کرده اید نام آن را قرار دهید
Database Connection ID
به پیش فرض بر روی db تنظیم هست و منظور نامی است که هنگام تنظیمات دیتابیس برای آن قرار دادید:
درپروژه های basic اشاره به فایل db.php در فولدر config
در پروژه های advance اشاره به فایل main-local.php در فولدر common
'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=bge', 'username' => 'root', 'password' => '123456789', 'charset' => 'utf8', ],
Use Table Prefix
در صورتی که جدول شما دارای prefix هست و نمیخواهید که این prefix در مدل لحاظ بشه تیک آن را بزنید
مثلا جدول tpl_post دارید ، در صورتی که تیک آن را بزنید
مدل ایجاد شده نام جدول را post و prefix آن را tpl می گذارد
Generate Relations
این گزینه که به صورت دراپ دان هست مربوط به روابط بین جداول می باشد
که میتوانید ایجاد یا عدم ایجاد آن را مدیریت کنید
Generate Labels from DB Comments
متونی که در comment جداول ایجاد کردید را به عنوان label در مدل قرار می دهد :
public function attributeLabels() { return [ 'id' => 'ID', 'fullname' => 'نام و نام خانوادگی', 'email' => 'ایمیل', 'subject' => 'موضوع', 'content' => 'متن پیام', 'user_id' => 'ارسال کننده', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'department_id' => 'دپارتمان', 'status' => 'وضعیت', ]; }
Generate ActiveQuery
استفاده از activeQuery را فعال می کند که پس از کلیک بر روی آن موارد دیگر اضافه می شود
فعلا نمیخواهیم در اینجا به این موضوع بپردازیم
Enable I18N
استفاده از چند زبانگی را فراهم میکند . در آموزش های بعدی به آن می پردازیم
Use Schema Name
schema name را در active record لحاظ می کند
Code Template
قالب ایجاد مدل را انتخاب می کند .در صورتی که میخواهید استاندارد ایجاد مدل را تغییر دهید ابتدا باید یک قالب ایجاد کنید و در اینجا آن را انخاب نمایید
در آخر دکمه ی preview کلیک کرده تا کدمربوط را ایجاد کند .تصویر زیر:
در صورتی که همه چی اوکی بود بر روی دکمه Generate کلیک کرده و به فولدر مدل ها مراجعه کنید تا مدل خود را ببینید.
<?php namespace app\models; use Yii; /** * This is the model class for table "buy_cat". * * @property integer $id * @property string $title * @property integer $parent_id * * @property Buy[] $buys * @property NBuyCat $parent * @property NBuyCat[] $nBuyCats */ class NBuyCat extends \yii\db\ActiveRecord { /** * @inheritdoc */ public static function tableName() { return 'buy_cat'; } /** * @inheritdoc */ public function rules() { return [ [['parent_id'], 'integer'], [['title'], 'string', 'max' => 100] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'title' => 'Title', 'parent_id' => 'Parent ID', ]; } /** * @return \yii\db\ActiveQuery */ public function getBuys() { return $this->hasMany(Buy::className(), ['cat_id' => 'id']); } /** * @return \yii\db\ActiveQuery */ public function getParent() { return $this->hasOne(NBuyCat::className(), ['id' => 'parent_id']); } /** * @return \yii\db\ActiveQuery */ public function getNBuyCats() { return $this->hasMany(NBuyCat::className(), ['parent_id' => 'id']); } }