Yêu cầu thg 5 14, 2020 7:05 SA 206 0 2
  • 206 0 2
0

Tối ưu hóa câu truy vẫn trong laravel

Chia sẻ
  • 206 0 2

Mọi người cho em hỏi. Em đang có đoạn code như thế này. Nhưng theo cách code này thì phải sử lý khá nhiều câu query. Có cách nào tối ưu hóa hơn không ạ? Em cảm ơn.

thg 5 14, 2020 7:14 SA

Yêu cầu của bài toán này là gi và mối quan hệ giữa User và TDevice như thế nào hả bạn?

thg 5 15, 2020 1:16 SA

@caoquangtu Chủ thớt copy code lên đây cho ae đỡ phải gõ lại được không?

2 CÂU TRẢ LỜI


Đã trả lời thg 5 14, 2020 7:08 SA
Đã được chấp nhận
+2

Đầu tiên thì bạn nên sử dụng Eager Loading. Chứ cứ mỗi lần foreach bạn lại query vài câu như này thì số query bị lặp lại sẽ rất nhiều. Và sau khi sử dụng Eager Loading thì hãy lấy dữ liệu qua relations, bạn đừng sử dụng cách query trực tiếp từ model

Chia sẻ
Đã trả lời thg 5 15, 2020 1:43 SA
+3
public function getDevicesService(Request $request, $device)
{
    $pageSize = _clamp($request->per_page, 20, 100) // clamp $pageSize, min: 20, max: 100 -> should add _clamp helper
    $users = User::with('devices')->paginate($pageSize); // eager loading user devices

    // Your logic

    return $users;
}

Optimize code cho chủ thớt một tẹo trước. Cho mình hỏi TDevice và cái $item_device device có quan hệ như nào với nhau vậy?

Trong vòng for chủ thớt không query như kia sẽ dẫn tới n+1 query. Nên dùng eager loading giống cái devices mình viết ở trên nhé.

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí