【问题标题】:laravel simple query builder (join & where case)laravel 简单查询生成器(join 和 where 案例)
【发布时间】:2016-02-14 02:26:27
【问题描述】:

我有两张桌子(product & type)

produk table
 -id
 -kode_produk
 -nama_produk
 -id_jenis_produk

jenis table
- id
- jenis_item

我想通过查询生成器从jenis table访问数据库jenis_item 到目前为止我已经尝试过

$selectProduk = DB::table('produk')->where('id', $id)->join('jenis', 'produk.id_jenis_produk', '=', 'jenis.id')->first();

类似的东西

$selectProduk = DB::table('produk')
                 ->join('jenis', function($join) {
                     $join->on('produk.id_jenis_item', '=', 'jenis.id')
                        ->where('produk.id', $id); // line 86 (error)
                    })->first();

但仍然失败,来自 laravel 日志的消息错误

exception 'ErrorException' with message 'Undefined variable: id' in C:\xampp\htdocs\itklan\app\controllers\ProdukController.php:86

我在哪里失踪?


@Thomas Kim

我得到另一个错误

exception 'ErrorException' with message 'Missing argument 3 for Illuminate\Database\Query\JoinClause::where(), called in C:\xampp\htdocs\itklan\app\controllers\ProdukController.php on line 86 and defined' in C:\xampp\htdocs\itklan\vendor\laravel\framework\src\Illuminate\Database\Query\JoinClause.php:87

第 87 行:

$selectProduk = DB::table('produk')
                        ->join('jenis', function($join) use($id) {
                            $join->on('produk.id_jenis_item', '=', 'jenis.id')
                                ->where('produk.id', $id);
                        })->first(); //line 87

【问题讨论】:

    标签: sql laravel join where


    【解决方案1】:

    这就是 PHP 闭包的工作方式。为了使用$id,闭包必须使用use关键字从父作用域继承变量。例如:

    $selectProduk = DB::table('produk')
                    ->join('jenis', function($join) use($id) { // Check this line
                        $join->on('produk.id_jenis_item', '=', 'jenis.id')
                            ->where('produk.id', '=', $id);
                    })->first();
    

    闭包也可以从父作用域继承变量。任何此类变量都必须传递给使用语言构造。

    来源:http://php.net/manual/en/functions.anonymous.php

    编辑:

    另外,看起来像 Laravel 的 JoinClause,你需要具体说明你的操作符。通常,您可以这样做:

    ->where('produk.id', $id);
    

    并且 Laravel 为你添加了一个相等的运算符。但是,对于连接子句,这将不起作用。您需要指定运营商。

    ->where('produk.id', '=', $id);
    

    【讨论】:

    • 解决了一个错误...但我收到另一个错误...我已经在我的帖子中更新...请检查
    • 我编辑了我的答案。对于 JoinClause,您需要指定运算符。 :)
    猜你喜欢
    • 2018-01-03
    • 2018-12-26
    • 2013-06-28
    • 1970-01-01
    • 2012-01-09
    • 2021-01-10
    • 2021-07-25
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多