5 ویژگی مهم Eloquent لاراول که نمیدونستی

444 بازدید 2 سال قبل 0 دیدگاه

یکی از مهمترین مزایای فریمورک لاراول، استفاده از یک ORM قدرتمند به اسم Eloquent هست که بعیده با لاراول کرده باشی ولی با این ابزار مهم آشنا نباشی. در واقع Eloquent همون چیزیه که کار با دیتابیس و مدل ها در لاراول رو اینقدر رضایت بخش کرده.

توی این پست قراره به 5 تا از ترفندها و ویژگی های Eloquent که با وجود کاربرد زیاد، کمتر مورد توجه قرار گرفته شدند بپردازیم.

1) آپدیت همزمان مدل ها با یک query در لاراول

اگر یه کالکشن از مدل های eloquent در لاراول داشته باشی برای این که همه اونها رو آپدیت کنی میتونی از حلقه forach استفاده کنی و برای هر کدوم از مدل ها یک بار update رو صدا بزنی. اما راه حل هوشمندانه تر استفاده از متد toQuery هست که فقط یک بار متد update رو صدا میزنی!

// به ازای هر کاربر یک query
foreach ($users as $user) {
     $user->update([ 
     	'subscription' => 'lifetime'
     ]);
}


// فقط یک query
$users->toQuery()->update([
    'subscription' => 'lifetime'
]);

 

2) استفاده از query builder در عبارت شرطی where

در داخل عبارت شرطی where میتونی از query builder هم استفاده کنی (به عنوان subquery)

Comment::whereIn('user_id', User::select('id')->where('admin', true));

// select * from comments where user_id in
// (select id from users where admin = 1)

 

3) تعیین مقادیر پیش فرض برای relation ها در لاراول

میدونستی که برای relation ها در لاراول، میتونی مقدار پیش فرض در نظر بگیری؟ اینطوری دیگه نیازی نیست هربار چک کنی که مقدار اون ریلیشن null نباشه. 

خودم معمولا از این ترفند برای زمان هایی که در CRUD مدلها، قصد استفاده از فرم های یکسان برای create و edit دارم استفاده میکنم. در نتیجه برای فرم create دیگه با ارور موجود نبودن مدل مواجه نمیشم

class Comment extends Model { 
    public function author() { 
        return $this->belongsTo(User::class)->withDefault(
            ['name' => 'Guest']
        );
    } 
}

// now in vue instead of this
{{ $comment->author ? $comment->author->name : 'Guest' }}

// i can write this
{{ $comment->author->name }}

 

4) اضافه کردن cast به یک query دلخواه در laravel

قطعا میدونی که در لاراول میتونی فیلدهای یک مدل eloquent رو به آرایه casts اضافه کنی تا لاراول به صورت اتوماتیک اون ها رو تبدیل کنه. ولی میدونستی که میشه به یک query خاص هم cast رو اضافه کرد؟

$users = User::select ([
    'users.*', 
    'last_posted_at' => Post::selectRaw('MAX(created_at)')
                        ->whereColumn('user_id', 'users.id')
])->withCasts([
    'last_posted_at' => 'datetime'
])->get();

 

5) مطلع شدن از تغییر مدل بعد از آخرین ذخیره سازی

اگر بخوای چک کنی که مدلت بعد از آخرین save تغییری داشته یا نه میتونی از متد wasChanged در لاراول استفاده کنی

$user = Post::create([ 
    'title' => 'how good is laraplus.ir',
    'author' => 'sirvan',
    'likes' => 0
]);

$user->author = 'Sirvan Monfared';

$user->save(); 

$user->wasChanged(); // true  
$user->wasChanged('author'); // true  
$user->wasChanged(['author', 'likes']); // true  
$user->wasChanged(['title']); // false  
$user->wasChanged(['title', 'author']); // true  

 

حالا دیگه نوبت شماست. اگه ترفندی از eloquent در لاراول بلدی که احتمال میدی دیگران ندونند، در کامنت ها به اشتراک بذار

0 دیدگاه   (ارسال دیدگاه)