[英]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.