首页 文章

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

提问于
浏览
1

我需要翻译这个工作的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;

但它得到的结果是行不通的:

protected'message'=> string'SQLSTATE [42S22]:找不到列:1054'on子句'中的未知列'blog_post_id.id'(SQL:在blog_post_id.id = model_names_relations上从blog_posts内部联接model_names_relations中选择model_names.name . blog_post_id在model_names.id上的内部联接model_names = model_names_relations.model_name_id,其中blog_posts.id = 12)'(length = 357)private'string'(Exception)=> string''(length = 0)

什么是正确的转换语法?

1 回答

  • 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 表中没有'id' .

相关问题