【问题标题】:Native SQL to Query Builder in Laravel5原生 SQL 到 Laravel5 中的查询生成器
【发布时间】:2016-07-29 16:19:17
【问题描述】:

我在 Laravel 5 上有两个表,必须使用查询生成器。我已经得到了它的 sql,但我无法将它转换为 Query Builder 语法。 SQL 是

SELECT COUNT(A.cid)  FROM `A` WHERE A.cid IN (SELECT `id` FROM `B` WHERE `create_user`='$name') AND `access_time` BETWEEN '$start_data' AND '$end_data' 

当我使用时

DB::table('A')
        ->join('B', function ($join) {
            $join->on('A.id', '=', 'B.cid');
        })
        ->get();

类似这样的语法,是错误的,请问如何将原生SQL like  “IN”变成QueryBuilder,谢谢

【问题讨论】:

  • 通常发布错误信息可以帮助其他人解决问题;)

标签: php sql laravel


【解决方案1】:

尝试以下查询并查看结果:

$result= DB::table('a')
            ->select(DB::raw('COUNT(a.cid) as total_cid'))
            ->join('b', 'a.cid', '=', 'b.id')
            ->where('b.create_user', $name)
            ->whereBetween('a.access_time', [$start_data, $end_data])
            ->first();

或者试试这个

$result= DB::table('a')
            ->join('b', 'a.cid', '=', 'b.id')
            ->where('b.create_user', $name)
            ->whereBetween('a.access_time', [$start_data, $end_data])
            ->count();

在您的问题中,您询问如何使用IN,对于IN,请尝试以下操作:-

$result= DB::table('a')->whereIn('cid', [1,2,3,4]);

【讨论】:

  • 第二种方法可以得到结果
【解决方案2】:

这是joins in Laravel 5.2的语法:

$result= DB::table('a')
            ->join('b', 'a.id', '=', 'b.cid')
            ->select('a.cid')
            ->where('A.cid', 'like', '%string%') //optional like
            ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多