Преобразование необработанного SQL-оператора "многие ко многим" в красноречивый конструктор запросов

Мне нужно перевести этот рабочий оператор sql:

select model_names.name
FROM blog_posts 
INNER JOIN model_names_relations
INNER JOIN model_names
ON blog_posts.id = model_names_relations.blog_post_id and model_names.id = model_names_relations.model_name_id
WHERE blog_posts.id = '12'

в конструктор запросов laravel. Я НЕ использую полную версию orm, поэтому не могу использовать функцию ownstomany. Я ограничен построителем запросов.

Я пробовал это:

$query = ( new DbSql )->db()->table( 'blog_posts' )
        ->join( 'model_names_relations', 'blog_post_id.id', '=', 'model_names_relations.blog_post_id' )
        ->join( 'model_names', 'model_names.id', '=', 'model_names_relations.model_name_id' )
        ->where( 'blog_posts.id', '12')
        ->select( 'model_names.name' )
        ->get();

    var_dump( $query );
    exit;

Но не сработает получаю:

protected 'message' => string 'SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец' blog_post_id.id 'в' on clause '(SQL: выберите _3 _._ 4_ из blog_posts внутреннего соединения model_names_relations на _7 _._ 8_ = _9 _._ 10_ внутреннее соединение model_names на _12 _._ 13_ = _14 _._ 15_, где _16 _._ 17_ = 12) '(длина = 357) частная' строка '(Исключение) => строка' '(длина = 0)

Каким будет правильный синтаксис преобразования?


person Robert Brax    schedule 12.03.2017    source источник


Ответы (1)


Вот построитель запросов Laravel

$query =DB::table('blog_posts')
->join('model_names_relations', 'blog_posts.id', '=', 'model_names_relations.blog_post_id')
->join('model_names', 'model_names.id', '=', 'model_names_relations.model_name_id')
->where('blog_posts.id', '12')
->get();

Однако ваша ошибка означает, что в blog_post_id таблице нет идентификатора.

person EddyTheDove    schedule 12.03.2017
comment
Спасибо, но это странная проблема: у меня нет таблицы blog_post_id. И необработанный sql не вызывает проблемы. blog_post_id - имя столбца отношения. - person Robert Brax; 12.03.2017
comment
Хорошо, тогда я понял вашу ошибку. Это орфографическая ошибка. Я исправлю это для тебя - person EddyTheDove; 12.03.2017
comment
Вы допустили опечатку в JOIN. Ты написал blog_posts_id.id вместо blog_posts.id. Попробуй снова - person EddyTheDove; 12.03.2017