Dies ist eine Suchfunktion, die jedes Mitglied mit ihrem letzten registrierten Jahr zurückgibt.Laravel verschachtelte Join-Abfragen mit Abfrage-Generator
Ich habe es mit einem Aufruf DB :: raw() arbeiten. Aber es kann nicht mit dem Abfrage-Generator arbeiten.
Arbeits Code:
$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');
Mein Versuch, auf Query Builder Code:
$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');
}
);
Der resultierende Fehler ist:
Call to undefined Methode Illuminate \ Database \ Query \ JoinClause :: join()
Ich bin mir nicht sicher, ob dies daran liegt, dass die $j2
nicht mehr Zugriff auf die Join-Methode hat?
Raw MySQL-Abfrage:
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