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 шт):

Автор решения: Mark Khromov

Нашел решение для моей задачи, подходит идеально.

BooksSet::join('books', function ($join) {
    $join->on(function ($on) {
        $on->whereRaw('JSON_CONTAINS(books_sets.books, books.id)');
    });
});
→ Ссылка