Как объединить два красноречивых запроса в laravel - PullRequest
0 голосов
/ 15 мая 2018

Это моя попытка:

$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 голосов
/ 15 мая 2018

Использование fromSub():

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

В Laravel 5.6.17 вы можете упростить объединение с помощью rightJoinSub():

->rightJoinSub($calendar, 'cal', 'temp.date', 'cal.date')
0 голосов
/ 15 мая 2018

Это происходит главным образом потому, что если вы выполните команду dd ($ calendar), вы увидите, что метод toSql () просто переводит запрос в raw sql без параметров.$ id будет '?'это наиболее вероятно (как вы можете видеть в нижней строке ошибки).То же самое относится и к температуре

. Я не советую переходить на toSql (), если в этом нет особой необходимости, вы можете сделать один запрос, чтобы получить искомое содержимое

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...