簡體   English   中英

如何在Laravel中加入兩個雄辯的查詢

[英]How to join two eloquent queries in laravel

這是我的嘗試:

$calendar = Calendar::leftJoin("class", "class.start_date", "<=", "calendar.date")
        ->leftJoin("student", "class.id", "student.class_id")
        ->where("student.id", $id)
        ->select("calendar.date");
$calendarQuery = $calendar->toSql();

$temperature = Temperature
        ::leftJoin("temperature_type", "temperature.temperature_type_id", "temperature_type.id")
        ->where("temperature.student_id", $id)
        ->select("temperature.student_id", "temperature.id", DB::raw("date(temperature.created_at) as date"), DB::raw("cast(temperature.created_at as time) as time"), "status", "temperature_type_id", "temperature_type.name as temperature_type", "temperature.temperature", "temperature.unit")
        ->orderby("temperature.id");
$temperatureQuery = $temperature->toSql();

$return['output'] = DB::table(DB::raw("($temperatureQuery) AS temp"))
        ->rightJoin(DB::raw("($calendarQuery) AS cal"), 
        function($join) use ($calendar){
            $join->on("temp.date", "=" ,"cal.date")
            ->addBinding($calendar->getBindings());
        })->get();

return $return;

我想加入這兩個雄辯的查詢。

我發現了這個問題。 有什么建議么?

在此處輸入圖片說明

使用fromSub()

DB::query()->fromSub($temperature, 'temp')

在Laravel 5.6.17中,您可以使用rightJoinSub()簡化連接:

->rightJoinSub($calendar, 'cal', 'temp.date', 'cal.date')

發生這種情況的主要原因是,如果執行dd($ calendar),則會看到toSql()方法只是將查詢轉換為原始sql,而沒有參數。 $ id將為“?” 這很有可能(如您在錯誤的底端所見)。 溫度也一樣

我不建議您轉換為toSql()除非您確實需要,否則您可以執行一個查詢來獲取要查找的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM