Laravel 5.4: преобразование необработанного SQL-запроса в Laravel Eloquent - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь переписать этот SQL-запрос, но я застрял на этом этапе

Запрос предназначен для присоединения таблицы проектов к таблице project_progress с помощью подзапроса, чтобы присоединиться только к самой последней записи

SELECT * FROM projects
JOIN project_progress ON project_progress.id = 
(
    SELECT id FROM project_progress
    WHERE project_progress.project_id = projects.id
    ORDER BY project_progress.created_at DESC
    LIMIT 1
)
WHERE project_progress.next_action_date < NOW()
AND projects.status != 'Complete'
AND projects.member_id = 1
ORDER BY projects.title ASC

Кому:

$projects = App\Project::where('member_id', 1)
    ->join('project_progress', function ($join) {
        $join->on('project_progress.id', '=', function ($query) {
            $query->select('project_progress.id')
                ->from('project_progress')
                ->where('project_progress.project_id', 'projects.id')
                ->orderBy('project_progress.created_at', 'desc')
                ->limit(1);
        });
    })
    ->where('project_progress.next_action_date', '<', Carbon\Carbon::now())
    ->notCompleted()
    ->orderBy('projects.project_title', 'asc')
    ->get();

Я думаю, что-то не так с этой строкой, но я не знаю, как ее написать

$join->on('project_progress.id', '=', function ($query) {

ErrorException (E_ERROR) strtolower () ожидает, что параметр 1 будет строкой, объект задан \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Grammar.php

1 Ответ

0 голосов
/ 01 мая 2018

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

$join->where('project_progress.id', '=', function ($query) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...