-
Notifications
You must be signed in to change notification settings - Fork 0
ORM Advanced
پیش از اینکه به بررسی مباحث پیش رفته در این زمینه بپردازید بهتر است که تمام مباحث مقدماتی آن را به صورت کامل بررسی کرده و به آنها مسلط شوید.
روشهایی که برای ایجاد نمایش در ایجاد استفاده شده بسیار ساده است و هدف اصلی در این سادگی ایجاد یک نمایش سریع است که در سطح مدل انجام میشود. به این ترتیب نه تنها در سطح مدل داده میتوانید نمایشهای متفاوتی ایجاد کنید بلکه میتوانید ترکیب جدولهای داده را نیز تعریف کنید.
در اینجا تلاش میکنیم با استفاده از یک نمونه ساده روشهای به کار گرفته شده برای تعریف نمایش را بررسی کنیم.
در اینجا از دو مدل ساده استفاده میکنیم که یکی فهرست و دیگری گزینههای موجود در فهرست است.
class Todo_Item extends Pluf_Model
{
public $_model = __CLASS__;
function init()
{
$this->_a['table'] = 'todo_items';
$this->_a['model'] = __CLASS__;
$this->_a['cols'] = array(
'id' =>
array(
'type' => 'Pluf_DB_Field_Sequence',
'blank' => true,
),
'item' =>
array(
'type' => 'Pluf_DB_Field_Varchar',
'blank' => false,
'size' => 250,
),
'completed' =>
array(
'type' => 'Pluf_DB_Field_Boolean',
'default' => false,
'index' => true,
),
'list' =>
array(
'type' => 'Pluf_DB_Field_Foreignkey',
'blank' => false,
'model' => 'Todo_List',
),
);
$this->_a['idx'] = array();
}
}
class Todo_List extends Pluf_Model
{
public $_model = __CLASS__;
function init()
{
$this->_a['table'] = 'todo_lists';
$this->_a['model'] = 'Todo_List';
$this->_a['cols'] = array(
'id' =>
array(
'type' => 'Pluf_DB_Field_Sequence',
'blank' => true,
),
'name' =>
array(
'type' => 'Pluf_DB_Field_Varchar',
'blank' => false,
'size' => 100,
),
);
$this->_a['idx'] = array();
$this->_a['views'] = array();
}
}
حال فرض کنید که میخواهیم یک نمایش جدید به مدل دادهای گزینههای یک فهرست اضافه کنیم. برای این کار کافی است که در متد مقداردهی کد زیر را اضافه کنید:
$this->_a['views'] = array(
'with_list' => array(
'join' => 'LEFT JOIN '.$this->_con->pfx.
'todo_lists ON list='.$this->_con->pfx.'todo_lists.id',
'select' => $this->getSelect().', name',
'props' => array('name' => 'list_name'),
)
);
همانگونه که قابل مشاهده است تمام نمایشهای یک مدل دادهای به صورت یک آرایه تعرفی میشوند که اندیس آرایه نام نمایش در نظر گرفته میشود. در نمونهای که در بالا آورده شده است تنها یک نمایش ایجاد شده که نام آن with_list است.
هر نمایش دستهای از خصوصیتها دارد که هر یک امکاناتی را برای نمایش فراهم میکنند. اولین خصوصیت join است که با استفاده از آن میتوانید جدولهای متفاوت را با یکدیگر ترکیب کنید در اینجا گزینهها با لیست مربوطه ترکیب شده اند.
یکی دیگر از خصوصیتهایی که برای نمایش در نظر گرفته شده است select است که در آن تعیین میشود چه خصوصیتهایی باید به عنوان نتیجه در نظر گرفته شود. در این نمونه علاوه بر تمامی خصوصیتهای یک گزینه از یک فهرست، نام فهرست نیز انتخاب شده است.
خصوصیت دیگر props است که تعیین میکند دادههایی که با استفاده از این نمایش انتخاب شدهاند با چه نامی در کلاسهای معادل ایجاد شوند. در اینجا نام انتخاب شده از جدول به صورت یک فیلد جدید به نام list_name به مدل دادهای اضافه شده است.
بنابر این با استفاده از این نمایش میتوان فهرست تمام گزینهها را به همراه نام فهرست معادل آنها را داشت.
استفاده از یک نمایش جدید ایجاد شده نیز ساده است. برای نمونه فراخوانی نمایشی که در بالا ایجاد شده است به صورت زیر خواهد بود:
$items = Pluf::factory('Todo_Item')->getList(array('view' => 'with_list'));
foreach ($items as $item) {
print $item->item.' in '.$item->list_name."\n";
}
همانگونه که قابل مشاهده است در این حالت تنها یک SQL Query اجرا میشود که منجر به افزایش کارایی خواهد شد.
- select: پارامترهایی که باید انتخاب شود
- join : برای ترکیب دوتا جدول
- group : خصوصیتی که بر اساس آن باید دسته بندی شود
- props : خصوصیتهایی اضافه که باید نمایش داده شود