/ / SELECT FROM AS et JOIN dans Laravel - php, mysql, laravel

SELECT FROM AS et JOIN dans Laravel - php, mysql, laravel

Comment effectuer cette requête sur Laravel?

SELECT *
FROM conversion t1
JOIN (SELECT report_id, MAX(id) id
FROM conversion
GROUP BY report_id ) AS t2
ON t1.id = t2.id AND t1.report_id = t2.report_id

Je lis déjà dans Laravel Documentary et ne trouve rien,

J’ai déjà essayé SQL et je travaille mais je ne sais pas comment exécuter cette requête dans Laravel.

S'il vous plaît aider à résoudre ce problème, merci.

Réponses:

4 pour la réponse № 1

Je pense que c'est la bonne solution pour votre question:

$subQuery = DB::table("conversion")
->selectRaw("report_id, MAX(id) id")
->groupBy("report_id")
->toSql();

$data = DB::table("conversion t1")
->join(DB::raw("(" . $subQuery . ") as t2"), function ($join) {
$join->on("t1.id", "t2.id")
->on("t1.report_id", "t2.report_id");
}, null, null, "")
->get();

Si vous voulez vérifier la requête de celle-ci, vous pouvez utiliser ->toSql() au lieu de ->get() à la fin. La sortie est:

select *
from `conversion t1`
join (
select report_id, MAX(id) as id
from `conversion`
group by `report_id`
) as t2
on `t1`.`id` = `t2`.`id`
and `t1`.`report_id` = `t2`.`report_id`

1 pour la réponse № 2

Je n'ai pas eu mon IDE pour le moment, mais ça devrait marcher comme ça:

$results = DB::select(DB::raw ("SELECT *
FROM conversion t1
JOIN (SELECT report_id, MAX(id) id
FROM conversion
GROUP BY report_id ) AS t2
ON t1.id = t2.id AND t1.report_id = t2.report_id"));