为了账号安全,请及时绑定邮箱和手机立即绑定

DB::select 的输出与 phpMyAdmin 中的原始查询不同

DB::select 的输出与 phpMyAdmin 中的原始查询不同

PHP
繁花如伊 2023-10-15 15:46:04
我有一个在 Laravel 应用程序中使用的 MariaDB 查询,我希望它返回 7 列。当我使用 PHP 转储结果数组时,它似乎只返回 4。但是,当我采用相同的查询并在 PhpMyAdmin SQL 编辑器中运行它时,它返回的全部 7 与我的预期完全一致。只是想知道是什么导致 Laravel 将结果过滤为只有四列:状态、姓名、电话号码和描述?谢谢!拉拉维尔查询:    $entries = DB::select('SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id');PHPMyAdmin SQL 编辑器的查询:    SELECT status, contacts.name, contacts.telephone_number, companies.name, roles.name, stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

两种情况的结果相同。他们只是使用相同的属性,因此雄辩的结果相互覆盖。使用别名来解决问题

SELECT status, contacts.name as contact_name, contacts.telephone_number, companies.name as company_name, roles.name as role_name , stages.description, actions.description FROM entries JOIN contacts ON entries.contact_id = contacts.id JOIN companies ON contacts.id = companies.contact_id JOIN roles ON companies.id = roles.company_id JOIN stages ON roles.id = stages.role_id JOIN actions ON stages.id = actions.stage_id


查看完整回答
反对 回复 2023-10-15
?
慕容3067478

TA贡献1773条经验 获得超3个赞

您应该设置别名以避免覆盖。另一件事是,如果你使用 Laravel,那么 eloquent 就是你的朋友:


$entries = DB::table('entries')

    ->join('contacts', 'entries.contact_id', '=', 'contacts.id')

    ->join('companies', 'contacts.id', '=', 'companies.contact_id')

    ->join('roles', 'companies.id', '=', 'roles.company_id')

    ->join('stages', 'roles.id', '=', 'stages.role_id')

    ->join('actions', 'stages.id', '=', 'actions.stage_id')

    ->select('status', 'contacts.name AS contact_name', 'contacts.telephone_number', 'companies.name AS company_name', 'roles.name AS role_name', 'stages.description AS stage_description', 'actions.description AS action_description')

    ->get();

更好的方法是使用模型和集合关系。


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信