Eloquent INNER JOIN через JSON_CONTAINS
Всем привет! Столкнулся с проблемой. Создаю такой SQL запрос:
SELECT * FROM books_sets INNER JOIN books ON JSON_CONTAINS(books_sets.books, books.id)
Соответственно, колонка books у books_sets содержит JSON в формате: [1, 2] (идентификаторы записей из таблицы books). Запрос выполняется корректно, возвращается то, что нужно мне.
Eloquent я использую отдельно от Laravel. Запросы формирую с помощью моделей.
Пример: BooksSet::join(...).
Загвоздка в том, что я не могу сделать join с помощью Eloquent.
Пытался с помощью: $query->join('books', 'JSON_CONTAINS(books_sets.books, books.id)'). Ошибка в синтаксисе (очевидная, в принципе), происходит обёртка в колонку через символы , добавляются операторы и join` происходит через равенство.
Как должен выглядить запрос через Eloquent, чтобы получить тот же результат для запроса который в самом начале поста?
Ответы (1 шт):
Нашел решение для моей задачи, подходит идеально.
BooksSet::join('books', function ($join) {
$join->on(function ($on) {
$on->whereRaw('JSON_CONTAINS(books_sets.books, books.id)');
});
});