مدل‌ها

مجتبی پاکزاد کدایگنایتر 3.1.9 در حال تکمیل رایگان

مدل‌ها در کدایگنایتر، کلاس‌هایی برای کار با داده‌ها هستند. در واقع این مدل‌ها وظیفه دریافت داده از دیتابیس و تحویل آن به کنترلر را بر عهده دارند. مدل‌ها، کلاس‌های PHP هستند که برای کار با اطلاعات داخل دیتابیس طراحی شده‌اند. برای مثال، اگر بخواهید با استفاده از کدایگنایتر یک وبلاگ را مدیریت کنید. احتمالا یک کلاس مدل برای عملیات CRUD در رابطه با مطالب وبلاگ دارید.مثال زیر یک کلاس مدل است:

class Blog_model extends CI_Model {

        public $title;
        public $content;
        public $date;

        public function get_last_ten_entries()
        {
                $query = $this->db->get('entries', 10);
                return $query->result();
        }

        public function insert_entry()
        {
                $this->title    = $_POST['title']; // please read the below note
                $this->content  = $_POST['content'];
                $this->date     = time();

                $this->db->insert('entries', $this);
        }

        public function update_entry()
        {
                $this->title    = $_POST['title'];
                $this->content  = $_POST['content'];
                $this->date     = time();

                $this->db->update('entries', $this, array('id' => $_POST['id']));
        }

}
نکته: متدهای مثال بالا از متدهای Query Builder دیتابیس استفاده می‌کنند.
 
نکته: به منظور سادگی بیشتر، در این مثال از آرایه $_POST به صورت مستقیم استفاده شده است. به طور کلی، اصلا روش خوبی نیست و روش متداول‌تر استفاده از لایبرری input است $this->input->post('title').

آناتومی مدل

کلاس‌های مدل در دایرکتوری application/models/ ذخیره می‌شوند. مدل‌ها نیز مانند کنترلرها و ویوها با استفاده از ساب‌دایرکتوری‌ها قابل سازماندهی هستند. پروتوتایپ (نمونه اولیه و پایه‌ای) یک کلاس مدل به صورت زیر است:

class Model_name extends CI_Model {

}

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

class User_model extends CI_Model {

}

فایل حاوی این کلاس، فایل زیر است:

application/models/User_model.php

بارگذاری مدل

مدل‌ها معمولا از داخل متدهای کنترلرها بارگذاری و فراخوانی می‌شوند. برای لود یک مدل از متد زیر استفاده می‌شود:

$this->load->model('model_name');

اگر مدل در یک ساب‌دایرکتوری قرار داشته باشد، باید نام دایرکتوری نیز در کنار نام فایل نوشته شود. برای مثال، اگر مدل در application/models/blog/Queries.php قرار داشته باشد، به صورت زیر فراخوانی می‌شود:

$this->load->model('blog/queries');

هنگامی که مدل لود شد، با استفاده از آبجکتی همنام با نام مدل، می‌توانید به متدهای مدل دسترسی داشته باشید:

$this->load->model('model_name');

$this->model_name->method();

اگر تمایل دارید تا مدل را به یک آبجکت با نامی متفاوت تخصیص دهید، هنگام لود مدل، نام مورد نظر را به عنوان پارامتر دوم استفاده کنید:

$this->load->model('model_name', 'foobar');

$this->foobar->method();

مثال زیر یک کنترلر است که یک مدل را لود کرده و سپس یک ویو را نمایش می‌دهد:

class Blog_controller extends CI_Controller {

        public function blog()
        {
                $this->load->model('blog');

                $data['query'] = $this->blog->get_last_ten_entries();

                $this->load->view('blog', $data);
        }
}

بارگذاری خودکار مدل‌ها

اگر به یک مدل نیاز دارید تا در تمام اپلیکیشن به صورت خودکار لود شود، باید به کدایگنایتر بگویید تا در زمان آماده‌سازی اولیه، آن را به صورت خودکار لود کند. برای اینکار فایل application/config/autoload.php را باز کنید و مدل را به آرایه‌ی autoload اضافه کنید.

اتصال به دیتابیس

وقتی یک مدل لود می‌شود، به صورت خودکار به دیتابیس متصل نمی‌شود.

  • با استفاده از متدهای استاندارد دیتابیس، هم از داخل کلاس کنترلر و هم از داخل کلاس مدل می‌توانید به دیتابیس متصل شوید.
  • پارامتر سوم متد لود مدل را TRUE قرار دهید تا اتصال به دیتابیس به صورت خودکار در هنگام لود مدل فراخوانی شود. تنظیمات اتصال به دیتابیس، در فایل کانفیگ دیتابیس تعریف شده است.
$this->load->model('model_name', '', TRUE);
  • می‌توانید تنظیمات اتصال به دیتابیس را از طریق پارامتر سوم ارسال کنید:
$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('model_name', '', $config);

 

منبع
Models