Laravel Tips and Tricks
Bài đăng này đã không được cập nhật trong 5 năm
Giới thiệu
Xin chào mọi người. Chủ đề bài viết này mình xin tổng hợp lại một số tips nho nhỏ khi code Laravel
Tips and Tricks
1. Cache Database Queries
Khi project của bạn sử dụng quá nhiều các câu lệnh truy vấn, theo thời gian ứng dụng của chúng ta sẽ trở nên rất chậm chạp. May mắn là Laravel đã cung cấp cho chúng ta một cơ chế đơn giản cho việc cache lại các câu query bằng việc sử dụng method remember
, ví dụ:
$posts = Post::remember(60)->get();
Trong một giờ tới, câu truy vấn trên sẽ được lưu trong bộ nhớ cache và không cần thông qua database nữa.
2. Không nhất thiết phải tạo Controller
Nếu chúng ta muốn URL chỉ show ra một view, chúng ta không cần phải tạo Controller. Ví dụ, thay vì phải:
Route::get('about', 'TextsController@about');
và
class TextsController extends Controller
{
public function about()
{
return view('texts.about');
}
}
Chúng ta chỉ cần:
Route::view('about', 'texts.about');
3. Khôi phục nhiều bản ghi sau khi xóa mềm
Khi sử dụng tính năng xóa mềm của Laravel, chúng ta có thể khôi phục nhiều bản ghi bằng cách sử dụng withTrashed
và restore
:
Post::withTrashed()->where('author_id', 1)->restore();
4. Disable timestamp
Mặc định, Laravel sẽ tự động cập nhật giá trị hai trường created_at
và updated_at
cho các model.
Nếu chúng ta không muốn sử dụng chúng, chỉ cần thay đổi giá trị của timestamp
thành false
trong model. Ví dụ:
class Post extends Model
{
public $timestamps = false;
}
Nếu chúng ta vẫn muốn sử dụng một trong hai trường trên, chúng ta có thể override lại thông qua method getUpdatedAtColumn
trong model:
public function getUpdatedAtColumn() {
return null;
}
hoặc chỉ cần khai báo trong model:
const CREATED_AT = null;
const UPDATED_AT = null;
5. increment
và decrement
Giả dụ chúng ta muốn tăng hay giảm giá trị của một trường, ví dụ:
- Tăng view_count mỗi lần người dùng xem bài viết.
- Sản phẩm sau khi được thanh toán sẽ tự động trừ trong kho.
Chúng ta sẽ dử dụng
increments
vàdecrements
. Ví dụ:
Post::find($post_id)->increment('view_count');
Product::find($product_id)->decrement('quantity', 50);
6. Kiểm tra view có tồn tại hay không
Chúng ta có thể kiểm tra view trước khi xuất ra cho người dùng thông qua:
if (view()->exists('custom.page')) {
// Load the view
}
7. Error page
Khi chúng ta muốn tạo một trang thông báo lỗi, lỗi HTTP Code 500 chẳng hạn, chúng ta chỉ cần tạo một view blade
với mã code 500 là tên file, ví dụ resources/views/errors/500.blade.php
, Laravel sẽ tự động đối ứng lỗi 500 đó với trang chúng ta vừa tạo.
8. dd()
Thay vì phải viết
$users = User::where('name', 'Taylor')->get();
dd($users);
chúng ta có thể thêm trực tiếp method dd()
vào cuối cùng của câu query:
$users = User::where('name', 'Taylor')->get()->dd();
9. Cập nhật trường updated_at của model cha
Khi chúng ta update một bản ghi của model con và muốn cập nhật luôn trường updated_at
của model cha, ví dụ, khi chúng ta thêm một comment trong bài viết và muốn cập nhật updated_at
của model cha Post
, chúng ta chỉ cần thêm $touches = ['post'];
trong model con Comment
.
Cụ thể:
class Comment extends Model
{
/**
* All of the relationships to be touched.
*
* @var array
*/
protected $touches = ['post'];
}
10. Auth::once()
Khi chúng ta muốn user được login vào mà không sinh ra session hay cookie nào (rất hữu ích cho các stateless API - những API mà sau khi client gửi dữ liệu lên server, server thực thi xong, trả kết quả thì “quan hệ” giữa client và server bị “cắt đứt” – server không lưu bất cứ dữ liệu gì của client), chúng ta sẽ dùng Auth::once()
:
if (Auth::once($credentials)) {
// Do something here
}
Tham khảo
https://laravel-news.com/eloquent-tips-tricks
https://laraveldaily.com/wp-content/uploads/2018/11/Laravel-Tips-2.pdf
https://code.tutsplus.com/tutorials/25-laravel-tips-and-tricks--pre-92818
All rights reserved