首页 > 解决方案 > Laravel 查询生成器 (5.6)

问题描述

您好,我正在尝试将此 SQL 代码复制到 Laravel qBuilder 中,但我没有在集合中得到我想要的结果:

select chars.name, class.name, specs.name
FROM characters as chars 
JOIN charclasses as class
JOIN charspecs as specs
WHERE chars.class_id = class.id
AND chars.spec_id = specs.id

我得到以下输出:
在此处输入图像描述

然后我在 Laravel 中尝试了这个:

$charData = DB::table('characters')
        ->select('characters.*', 'charclasses.name', 'charspecs.name')
        ->join('charclasses', 'characters.class_id', '=', 'charclasses.id')
        ->join('charspecs', 'characters.spec_id', '=', 'charspecs.id')
        ->orderBy('user_id', 'ASC')
        ->get();
    dd($charData);

结果是:
在此处输入图像描述

标签: phpsqllaravellaravel-query-builder

解决方案


问题是您选择了三个具有相同名称的字段。这些字段被添加到 php 代码中的数组中,但数组字段被覆盖两次,因为关联数组中不能有重复的键。如果要选择这三个名称,则必须给它们另一个名称。

$charData = DB::table('characters')
    ->select('characters.*', 'charclasses.name as charclassname', 'charspecs.name as charspecname')
    ->join('charclasses', 'characters.class_id', '=', 'charclasses.id')
    ->join('charspecs', 'characters.spec_id', '=', 'charspecs.id')
    ->orderBy('user_id', 'ASC')
    ->get();
dd($charData);

推荐阅读