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