ادغام Eloquent ORM بر روی کدایگنایتر 3

کدایگنایتر توی ایران یه فریم ورک کاملا محبوب حساب میشه. و دوستانی دارم که به شدت روی این فریم ورک تعصب دارن. اما به نظرم ORM کدایگنایتر در مقابل Eloquent ORM حرفی برای گفتن نداره.من اولین پروژه ی خودم رو با کدایگنایتر نوشتم. اما به دلیل آشنایی با yii2 و لاراول خیلی وقت بود که ازش استفاده نکرده بودم. بهرحال همکاری با یک شرکت مجبور شدم بعد از شش سال کار رو دوباره باهاش شروع کنم. کار کردن با همه جاش برام شیرین بود جز کار با مدل، برای همین مجبور شدم eloquent رو باهاش ادغام کنم.فریم ورک کدایگنایتر خیلی سریع، سبک و ساده است. و به خوبی از MVC پیشتیانی می کنه. برای پروژه های کوچیک واقعا چیز خوبیه و به pure PHP خیلی نزدیک تره. و خلاصه طرفداران خودش رو داره. اما فکرش رو بکنید بتونیم ORM لاراول رو باهاش ادغام کنیم. واقعا باحال میشه نه؟ پس این آموزش رو دنبال کنید.مراحل ادغام Eloquent در کدایگنایترنصب پکیج Illuminate/Database از طریق composerپیکربندی Hook در کدایگنایترتست کار با Laravel Eloquent و شروع کوئری زدننصب پکیج Illuminate/Database از طریق composerفرض رو بر این میزاریم که composer رو روی سیستمتون نصب دارید. در روت پروژه ی کدایگنایتری خودتون، ترمینال رو باز کنید. و دستور زیر رو اجرا کنید.composer require illuminate/database 5.1.16 دستور بالا پکیج دیتابیس لاراول رو از سایت packagist بر روی پروژه ی کدایگنایتر ما نصب می کنه. بنابر این نیاز داریم برای فایل مدلمون یک autoload درست کنیم. برای این منظور فایل composer.json رو باز کنید و تغییرات زیر رو اعمال کنید. "autoload": { "classmap": [ "application/models" ] } الان یه همچین چیزی داریم:{ "require": { "illuminate/database": "5.1.16" }, "autoload": { "classmap": [ "application/models" ] } } در نهایت خط زیر رو به فایل index.php در روت پروژه ی خودتون اضافه کنید. require_once 'vendor/autoload.php'; در ترمینال خودتون دستور زیر رو اجرا کنید تا تغییرات دامپ بشه. composer dump-autoload پیکربندی Hook در کدایگنایتراولا بدونید که hook یه ویژگی در کدایگنایتر هست که این امکان رو به ما می ده که بدون دستکاری هسته ی اصلی فریم ورک، پیکربندی خودمون رو اعمال کنیم.اول از همه ما باید به کدایگنایتر بفهمونیم که میخوایم از Hook استفاده کنیم. بنابراین فایل کانفیگ رو باز کنید.application/config/config.php$config['enable_hooks'] = TRUE; حالا فایل hook.php رو باز کنید و تغییرات زیر رو توش اعمال کنید.application/config/hooks.php$hook['post_controller_constructor'][] = [ 'class' => 'EloquentHook', 'function' => 'bootEloquent', 'filename' => 'EloquentHook.php', 'filepath' => 'hooks' ]; توی این فایل گفتیم که بعد از اینکه constructor کدایگنایتر اجرا شد فایل EloquentHook.php رو اجرا کن. بنابر این این فایل رو در مسیر application/hooks می سازیم. <?php use Illuminate\Database\Capsule\Manager as Capsule; class EloquentHook { protected $instance; private function setInstance() { $this->instance =& get_instance(); } private function loadDatabase() { $this->instance->load->database(); } private function getDB() { return $this->instance->db; } public function bootEloquent() { $this->setInstance(); $this->loadDatabase(); $config = $this->getDB(); $capsule = new Capsule; $capsule->addConnection([ 'driver' => 'mysql', 'host' => $config->hostname, 'database' => $config->database, 'username' => $config->username, 'password' => $config->password, 'charset' => $config->char_set, 'collation' => $config->dbcollat, 'prefix' => $config->dbprefix, ]); $capsule->setAsGlobal(); $capsule->bootEloquent(); } } توجه داشته باشید متغیر $config در واقع کانفیگ دیتابیس رو در خودش نگه می داره که قبلا در فایل application/config/database.php توسط شما مقدار دهی شده. استفاده از Laravel Eloquent و کوئری زدنخب ما همه ی کارهایی که باید رو، انجام دادیم. پس بیاید تست کنیم. از این به بعد مدل هامون رو از کلاس Eloquent اکستند می کنیم.<?php use \Illuminate\Database\Eloquent\Model as Eloquent; class User extends Eloquent { protected $table = "users"; // table name } توجه:فراموش نکنید بعد از ایجاد هر مدل باید دستور زیر رو در ترمینال خودتون وارد کنید. composer dump-autoload حالا برای تست موارد بالا، کافیه در کنترلر پروژتون به صورت زیر کوئری بزنید. User::all(); // will fetch all users User::find(1); // will fetch user with id 1 User::where('id', '>', 1)->get(); // will fetch users with id > 1 تبریک میگم شما به راحتی موفق شدید از ORM لاراول در پروژه ی کدایگنایتری خودتون استفاده کنید.