Sunday, March 12, 2017

Convert a many to many raw sql statement to eloquent query builder

I need to translate this working sql statement:

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'

to laravel query builder. I'm NOT using the full orm, so I can't use the belongstomany feature. I'm restricted to the query builder.

I tried this:

$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;

But it won't work I get:

protected 'message' => string 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'blog_post_id.id' in 'on clause' (SQL: select model_names.name from blog_posts inner join model_names_relations on blog_post_id.id = model_names_relations.blog_post_id inner join model_names on model_names.id = model_names_relations.model_name_id where blog_posts.id = 12)' (length=357) private 'string' (Exception) => string '' (length=0)

What would be the correct conversion syntax ?



via Robert Brax

Advertisement