آشنایی با مدل و Eloquent ORM در لاراول

از آنجایی که لاراول از معماری MVC بهره می‌برد، تا زمانی که ما صرفاً از Query Builderها استفاده کنیم، نخواهیم توانست از تمام پتانسیل معماری MVC و کار کردن با مدل‌ها بهره ببریم.

از طرفی کار کردن با مدل و الکوئنت‌ها ساده‌تر است و قدرت و انعطاف‌پذیری بالاتری به کدهای ما خواهد داد.

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

php artisan make:controller UserController
php artisan make:migration create_users_table
php artisan make:model User

هر سه دستور بالا را می‌توان طی یک دستور به سادگی بازنویسی کرد و طی این دستور ما مدلی به نام User و کنترلری به نام UserController و جدولی به نام users_table خواهیم داشت:

php artisan make:model User -c -m

دستور دیگری که مانند نمونه‌ی بالا مدل، کنترلر و مایگریشن را برایمان ایجاد می‌کند و علاوه بر آن اقدام به ایجاد factory برای مدل نیز می‌نماید، دستور زیر است که در پوشه‌ی database فایلی به نام UserFactory.php ایجاد خواهد کرد که برای کار با fakerها کاربرد دارد:

php artisan make:model User -a

نکته: هنگامی که از سوئیچ a استفاده کنیم، در کنترلر مربوطه بسیاری از متدهای مورد نیاز به صورت پیش‌فرض ایجاد خواهند شد.

نکته: البته باید به استانداردهای لاراول حتماً توجه کنیم. مثلاً نام مدل و کنترلر باید مفرد باشد و نام جدول باید به صورت جمع ایجاد شود که در حالت آخر، این موارد توسط Artisan در لاراول کنترل خواهند شد.

چند نکته‌ی بسیار مهم و کاربردی در استفاده از مدل در لاراول

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

۱- جدول خود را بر اساس استاندارد لاراول نامگذاری نکرده باشیم.

راهکار: کافی است در مدل مربوطه نام جدول را به مدل معرفی کنیم:

protected $table = 'students';

۲- کلید اصلی جدولمان را بر اساس استاندارد لاراول نامگذاری نکرده باشیم. (لاراول به صورت پیش‌فرض فیلد id را به عنوان کلید اصلی جدول می‌شناسد)

راهکار: کافی است به صورت زیر در مدل مربوطه کلید اصلی جدول را معرفی کنیم:

protected $primaryKey = 'student_id';

۳- از فیلدهای created_at و updated_at که به صورت خودکار در مایگریشن توسط timestamp در لاراول ایجاد می‌شوند استفاده نکرده باشیم.

راهکار: کافی است مقدار timestamp را در مدل مربوطه برابر با false قرار دهیم تا مدل بداند که قرار نیست از دو فیلد created_at و updated_at استفاده کند:

protected $timestamp = false;

حالا به سادگی می‌توانیم از Eloquent به جای Query Builder استفاده کنیم. یعنی به جای use کردن کوئری بیلدر، مدل مربوطه را use نماییم:

use Illuminate\Support\Facades\DB;
use App\User

خط اول در بالا use کردن DB که یک Facade است را نمایش می‌دهد که ما به جای آن همانطور که در خط دوم مشخص شده، می‌توانیم مدل User یا سایر مدل‌هایمان را use کنیم.

در زیر هم دو نمونه از حالات استفاده از الکوئنت در کنترلر را مشاهده می‌کنیم که معادل هم می‌باشند و در حالت دوم صریحاً مدل use شده است و دیگر نیازی به use کردن در بالای کنترلر ندارد.

$users = User::orderBy('id','DESC')->get();
$users = App\User::orderBy('id','DESC')->get();

درباره نویسنده: احسان

مطالب زیر را حتما بخوانید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *