Đây là hàm tìm kiếm trả về từng thành viên có năm đăng ký gần đây nhất của họ.Truy vấn tham gia lồng nhau Laravel với trình tạo truy vấn
Tôi nhận nó hoạt động với lệnh gọi hàm DB :: raw(). Nhưng không thể làm cho nó hoạt động với trình tạo truy vấn.
Mã làm việc:
$query = DB::table('membership as m');
$query->join(
DB::raw(
'(SELECT my.*
FROM membership_years my
INNER JOIN (
SELECT member_id,MAX(membership_year) AS max_my
FROM membership_years
GROUP BY member_id
) my2
ON my.member_id = my2.member_id
AND my.membership_year = my2.max_my
) my'
)
,'m.id','=','my.member_id');
nỗ lực của tôi trên mã builder truy vấn:
$query = DB::table('membership as m');
$query->join('membership_years as my',
function($j1){
$j1->join('membership_years as my2',
function($j2){
$j2->where('my.membership_year','=','MAX(my2.membership_year)')
->on('my.member_id','=','my2.member_id');
}
)->on('m.id','=','my.member_id');
}
);
Lỗi kết quả là:
Gọi phương pháp xác định Illuminate \ Database \ Query \ JoinClause :: join()
Tôi không chắc chắn nếu điều này là do $j2
không có quyền truy cập vào phương thức tham gia nữa?
liệu MySQL truy vấn:
SELECT my.membership_year,m.*
FROM membership AS m
INNER JOIN
(
SELECT my1.*
FROM membership_years my1
INNER JOIN
(
SELECT member_id,MAX(membership_year) AS max_my
FROM membership_years
GROUP BY member_id
) my2
ON my1.member_id = my2.member_id
AND my1.membership_year = my2.max_my
) my
ON m.id = my.member_id
ORDER BY m.id ASC