Mọi người đều biết find() method, đúng ko?
$user = User::find(1);
Ít người biết rằng nó có thể chấp nhận nhiều ID như một mảng:
$users = User::find([1,2,3]);
Có một cách đơn giản để làm điều này:
$users = User::where('approved', 1)->get();
Như sau:
$users = User::whereApproved(1)->get();
Vâng, bạn có thể thay đổi tên của bất kỳ field nào và thêm nó vào như một hậu tố của function where và nó sẽ hoạt động: Ngoài ra, có một số pre-defined method trong Eloquent, liên quan date/time:
User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));
Một “mẹo nhỏ” phức tạp hơn một chút. Điều gì sẽ xảy ra nếu bạn có chủ đề trên diễn đàn nhưng muốn “`order“` chúng theo bài đăng mới nhất? Yêu cầu khá phổ biến trong các diễn đàn với các chủ đề cập nhật mới nhất ở trên top, phải không?
Đầu tiên, mô tả relationship riêng biệt cho bài đăng mới nhất về chủ đề:
public function latestPost()
{
return $this->hasOne(\App\Post::class)->latest();
}
Và sau đó, trong controller của chúng ta, ta có thể làm điều “magic” này:
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
Nhiều người trong chúng ta viết các truy vấn có điều kiện với “if-else” như thế này:
if (request('filter_by') == 'likes') {
$query->where('likes', '>', request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
$query->orderBy('created_at', request('ordering_rule', 'desc'));
}
Nhưng có một cách tốt hơn bằng cách sử dụng when() function:
$query = Author::query();
$query->when(request('filter_by') == 'likes', function ($q) {
return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});
Nó có thể không ngắn hơn, nhưng mạnh nhất là truyền các parameter:
$query = User::query();
$query->when(request('role', false), function ($q, $role) {
return $q->where('role_id', $role);
});
$authors = $query->get();
Giả sử bạn có Post belongTo Author và sau đó là Blade code:
{{ $post->author->name }}
Nhưng nếu author bị xóa hoặc không được set vì một lý do nào đó thì sao? Bạn sẽ nhận được một lỗi, đại loại là “property of non-object”.
{{ $post->author->name ?? '' }}
Nhưng bạn có thể làm điều đó trên Eloquent relationship:
public function author()
{
return $this->belongsTo('App\Author')->withDefault();
}
Trong ví dụ này, author() relation sẽ trả về một empty App\Author model nếu không có author nào được đính kèm vào post. Hơn nữa, chúng ta có thể gán giá trị default property cho default modedl đó.
public function author()
{
return $this->belongsTo('App\Author')->withDefault([
'name' => 'Guest Author'
]);
}
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE