【问题标题】:Sql correct syntax for raw query in laravellaravel 中原始查询的 Sql 正确语法
【发布时间】:2018-01-27 12:55:07
【问题描述】:

我已经在 mysql 中测试了这个查询并且它有效。 它在我的控制器中不起作用。任何人都可以纠正它吗?

 $albi = DB::table(DB::raw("(SELECT
                          albi.id,
                          albi.CoverAlbo,
                          albi.Nazione,
                          albi.Editore,
                          albi.NomeCollanaUfficiale,
                          albi.AnnoPubblicazione
                          FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id
                          AND au.user_id = $user_id
                          WHERE au.albi_id IS NULL)"));

这是错误:

SQLSTATE[42000]:语法错误或访问冲突:1248 每个派生表都必须有自己的别名

请帮帮我!!!

【问题讨论】:

    标签: sql database laravel controller


    【解决方案1】:

    这是因为您使用DB::table(),然后在其中放置raw 查询(创建子查询),然后没有给它一个别名。

    要使上述代码正常工作,您只需要将最后一行更改为:

    WHERE au.albi_id IS NULL) as t1")); //notice the "t1" alias
    

    或者你可以DB::select():

    $albi = DB::select("SELECT
                          a.id,
                          a.CoverAlbo,
                          a.Nazione,
                          a.Editore,
                          a.NomeCollanaUfficiale,
                          a.AnnoPubblicazione
                          FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id
                          AND au.user_id = $user_id
                          WHERE au.albi_id IS NULL");
    

    请注意,select()DB::table()->select() 不同


    或者您可以只使用查询生成器:

    $albi = DB::table('albi')
        ->select('id', 'CoverAlbo', 'Nazione', 'Editore', 'NomeCollanaUfficiale', 'AnnoPubblicazione')
        ->leftJoin('albi_user', 'albi.id', 'albi_user.alibi_id')
        ->where('albi_user.user_id', $user_id)
        ->whereNull('albi_user.albi_id')
        ->get();
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      您应该使用别名而不是表名。所以试试这个:

       $albi = DB::table(DB::raw("(SELECT
                                a.id,
                                a.CoverAlbo,
                                a.Nazione,
                                a.Editore,
                                a.NomeCollanaUfficiale,
                                a.AnnoPubblicazione
                                FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id
                                AND au.user_id = $user_id
                                WHERE au.albi_id IS NULL)"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-27
        • 2018-04-28
        • 2017-07-15
        • 2017-07-26
        • 2021-12-05
        • 2022-11-16
        • 2018-09-13
        • 2013-09-27
        相关资源
        最近更新 更多