【问题标题】:Laravel query left joinLaravel 查询左连接
【发布时间】:2016-01-03 21:24:44
【问题描述】:

我有一个带有父 id 和子 category_id 的自引用表,这个查询有 SQL:

SELECT a.id, a.name, b.name, a.created_at
            FROM shop_categories a
            LEFT JOIN shop_categories b ON (a.id = b.category_id)
            WHERE a.category_id = 0

我正在尝试将其翻译为 Laravel 查询构建器语言,我设法想出了这个,但它不起作用,我不知道我做错了什么,我的 laravel 查询:

$shopcategories = DB::table('shop_categories as a')
            ->select('a.id', 'a.name','b.name','a.created_at')
            ->leftJoin('shop_categories as b', function ($join) {
                $join->on('a.id', '=', 'b.category_id');
            })
            ->where('a.category_id', '=', 0)
            ->get();

提前致谢。

【问题讨论】:

  • 什么不完全有效?错误?结果错误?
  • laravel 查询结果错误
  • 调用 toSql() 而不是 get() 以查看生成的 SQL 查询并检查它是否符合您的预期。如果没有,请粘贴生成的查询。

标签: php mysql sql laravel laravel-5


【解决方案1】:

以这种方式使用查询生成器:

DB::table('table1')
    ->leftJoin('table2', 'table1.columnX', '=', 'table2.columnY')
    ->where('table1.other_column', '=', 'someValue')
    ->select('table1.columnA as NewColumn1', 'table1.columnB as NewColumn2', 'table1.columnC as NewColumn3', 'table2.columnP4 as NewColumn', 'table2.columnQ as NewColumn5')
    ->get();

【讨论】:

  • 这不起作用,因为它是一个自引用表,(table1) 和 (table2) 是同一个表。
  • 这可能会帮助你*.com/questions/24672629/…