Query Scopes và Query Relation , là hai khái niệm không xa lạ với Laravel, có khi developer vẫn làm nó hàng ngày nhưng lại không rõ mình đang sử dụng lợi thế nữa của laravel.
Việc này giảm thiệu việc xử dụng đi xử dụng lại ở những lần query, khi project lớn lên điều này thật tuyệt vời ông mặt trời.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Scope a query to only include popular users.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
/**
* Scope a query to only include active users.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
$users = App\User::popular()->active()->orderBy('created_at')->get();Query relation thì sao, thường thì chúng ta vẫn dùng một số khai báo hasMany, belongsTo... đây cũng là một dạng query relation vậy khi có conditional thì sao.Ta có thể dùng cách sau
public function commentsCount()
{
return $this->comments()
->selectRaw('post_id, count(*) as aggregate')
->groupBy('post_id');
}
Sử dụng cũng đơn giản giống như gọi relation
$post = Post::with('commentsCount')->first();

Nhận xét
Đăng nhận xét