如何在laravel中加入两个雄辩的查询

时间:2018-05-15 11:10:41

标签: php 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;

我想加入这两个雄辩的问题。

我发现了这个问题。有什么建议?

enter image description here

2 个答案:

答案 0 :(得分:0)

这主要是因为如果你做dd($ calendar),你会发现toSql()方法只是将查询转换为原始sql,没有参数。 $ id将是&#39;?&#39;最有可能的(正如你在错误的底线看到的那样)。这同样适用于温度

我建议不要转换为toSql(),除非你真的需要,你可以做一个单一的查询来获取你正在寻找的内容

答案 1 :(得分:0)

使用fromSub()

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

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

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