Красноречивый запрос для поиска по двум таблицам - PullRequest
0 голосов
/ 01 июня 2018

Я борюсь со следующим запросом, используя Eloquent в Laravel 5.6.

Мне нужно вернуть все проблемы, которым назначено tag_id из 5, где project_id и item_id из таблицы проблем соответствует project_id и issue_id из моей сводной таблицы.

таблица проблем:

enter image description here

сводная таблица Issues_tags:

enter image description here

Я пробовал следующий код, но он возвращает все проблемы изв таблице проблем, однако ожидаемые результаты - 3.

Ожидаемые результаты

Результатами, возвращаемыми из таблицы issues, должны быть идентификаторы 1, 4 и 5.

$issues = Issue::join('issues_tags', 'issues_tags.project_id', 'issues_tags.issue_id')->where('issues_tags.tag_id', 5)->select('issues.*')->get();

1 Ответ

0 голосов
/ 01 июня 2018

Вам нужно указать таблицу проблем вместо меток вопросов в соединении.Левое объединение также поможет уменьшить результаты.Поскольку вы объединяете два разных ключа, вы должны использовать замыкание.

$issues = Issue::leftJoin('issues_tags', function($join) {
    $join->on('issues.project_id', '=', 'issues_tags.project_id');
    $join->on('issues.item_id', '=', 'issues_tags.issue_id');
})
->where('issues_tags.tag_id', 5)->select('issues.*')->get();

Если таблица действительно должна совпадать для project_id-> project_id и questions.id -> Issue_tags.issues_id, выможет изменить 2-е предложение соединения.

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