将多个原始sql语句转换为eloquent查询构建器

时间:2017-03-12 17:55:04

标签: laravel eloquent laravel-eloquent

我需要翻译这个有效的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,因此我无法使用属于该功能的功能。我被限制在查询构建器中。

我试过了:

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

但它得不到我的工作:

  

受保护的邮件' =>字符串' SQLSTATE [42S22]:找不到列:1054未知列' blog_post_id.id'在' on条款' (SQL:从model_names上的name内部加入blog_posts选择model_names_relationsblog_post_idid = model_names_relations。{{1内部联接blog_post_id位于model_namesmodel_names = idmodel_names_relations其中model_name_idblog_posts = 12)&# 39; (长度= 357)     私人'字符串' (例外)=>字符串'' (长度= 0)

正确的转换语法是什么?

1 个答案:

答案 0 :(得分:2)

这是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表中没有“id”。