【问题标题】:Laravel DB::table AND statement?Laravel DB::table AND 语句?
【发布时间】:2015-04-13 09:12:00
【问题描述】:

我对 Laravel 很陌生,不太了解 DB::table 方法与 AND 子句的结合。

所以我现在有这个查询:

$query = DB::select( DB::raw("SELECT * FROM tablethis WHERE id = '$result' AND type = 'like' ORDER BY 'created_at' ASC"));

它正在工作,但我想使用 Laravel 的查询生成器来生成类似的东西:

$query = DB::table('tablethis')->where('id', '=', $result)->where('type', '=', 'like')->orderBy('created_at', 'desc')

但这似乎完全忽略了第二个where()。那么,基本上我该怎么做呢?

【问题讨论】:

    标签: php database laravel


    【解决方案1】:

    只需在另一个->where 后面添加另一个->where 即可获得另一个where 声明

    所以你的代码应该没问题。

    $query = DB::table('tablethis')->where('id', '=', $result)->where('type', '=', 'like')->orderBy('created_at', 'desc')
    

    其他部分一定有问题。 我希望这不是您的完整查询。

    如果是,您需要在末尾添加->get()

    【讨论】:

    • 如果有帮助,我会尝试添加 ->get()。谢谢:)
    • @user2300189 没问题。让我知道它是否改变了什么。另外,如果您确实解决了问题,请告诉我是什么解决了您的问题。
    • 不幸的是它没有帮助。由于某种原因(如果您检查我对另一个答案的评论),它只是没有选择另一个 where-> 语句。检查了日志。也许我正在使用的 laravel 安装有问题。所以我想这次我只是通过原始方法来做到这一点。无论如何谢谢你,对不起,我没有足够的代表,我不能给你一个赞成票:)
    • @user2300189 很遗憾听到这个消息。我正在使用查询生成器,它对我来说很好用。(有 2 个 where 子句)。你的代码没有问题。我现在唯一能想到的就是检查 where 子句是否 100% 正确。查看查询是否不包含任何异常。检查你是否确定。也许使用dd(DB::getQueryLog()); 来查看查询的原始内容。
    • 是的,这绝对是 100% 正确,但输出是错误的。我正在使用的 LV 安装有问题。我注意到验证器的规则 alpha_num 也不起作用,而电子邮件验证器规则是。我想我正在考虑将整个东西升级到版本 5。但是我用原始查询做了这个,现在它工作得很好。再次感谢!
    【解决方案2】:

    确保此代码应按预期工作。

    我不知道您如何检查执行的查询,但您可以转到 app/providers/EventServiceProvider.php(我假设您有 L5)并在 boot 方法中添加:

    Event::listen(
        'illuminate.query',
        function ($sql, $bindings, $time) {
            $sql = str_replace(array('%', '?'), array('%%', "'%s'"),
                $sql);
            $full_sql = vsprintf($sql, $bindings);
    
            file_put_contents(storage_path() . DIRECTORY_SEPARATOR .
    
                'logs' . DIRECTORY_SEPARATOR . 'sql_log.sql',
                $full_sql . ";\n", FILE_APPEND);
        }
    );
    

    查看已执行的确切 SQL。

    在使用=操作符时另外(但只是改进),可以省略,所以在这里可以使用:

    $query = DB::table('tablethis')->where('id', $result)->where('type', 'like')->orderBy('created_at', 'desc');
    

    【讨论】:

    • 感谢您的信息。而且这个省略看起来像是我从现在开始要使用的东西:)。实际运行 Laravel 4.1.28,是否也可以在其中查看执行的 SQL?
    • @user2300189 如果你是 Laravel 的新手,你现在应该考虑学习 L5。您可以将完全相同的代码添加到 app/start/local.php 以跟踪代码更改(它适用于 L4.2 - 我没有使用过 L4.1,但它可能会同样工作)
    • 必须实际执行此操作:stackoverflow.com/questions/19131731/…(如果有人遇到相同问题,请链接)以使日志记录正常工作。事实上,由于某种原因,它似乎只是没有运行另一个 where->。我会按照你的建议从 laravel 5 开始,但我正在帮助一位朋友使用她用 laravel 构建的网站,所以不幸的是,这个项目没有机会。在任何情况下都感谢您的帮助,如果可以的话,会投票赞成:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2015-01-18
    • 2016-12-31
    • 2019-03-22
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多