在 laravel 中加入查询

Posted

技术标签:

【中文标题】在 laravel 中加入查询【英文标题】:Join query in laravel 【发布时间】:2015-06-24 18:25:37 【问题描述】:

我正在尝试在 laravel 中实现一个查询,但这并没有给我任何结果。但是,当我尝试在 php MyAdmin 中运行原始查询时,我得到了想要的结果

Laravel 查询:

DB::table('ticket_details')
    ->join('ticket_stages', 'ticket_stages.stage_id', '=', 'ticket_details.stage_id')
    ->join('users_details', 'users_details.user_id', '=', 'ticket_details.assigner_id')
    ->join('client_details', 'client_details.client_id', '=', 'ticket_details.client_id')
    ->join('user_roles', 'user_roles.role_id', '=', 'users_details.role_id')
    ->select('client_details.client_id, client_details.client_name,
        ticket_details.ticket_identifier, ticket_details.ticket_id, 
        ticket_stages.stage_name, ticket_details.assigner_id, 
        users_details.user_name, user_roles.role_name')
    ->get();

原始查询:

Select c.client_id, c.client_name, t.ticket_identifier, t.ticket_id, s.stage_name, 
    t.assigner_id, u.user_name, r.role_name 
from ticket_stages s inner join ticket_details t on s.stage_id = t.stage_id 
inner join users_details u on u.user_id = t.assigner_id 
inner join client_details c on t.client_id = c.client_id 
inner join user_roles r on r.role_id = u.role_id

具体的问题可能是什么?

【问题讨论】:

你可以在你的 Laravel 查询中使用toSQL() 来验证它生成的 SQL 是否与你在 PHPMyAdmin 中运行的 SQL 相同。 【参考方案1】:

Laravel 查询与原始查询不同,因为它也引用了ticket_details。第二张桌子似乎缺少这张桌子。您是否尝试按照“不要恐慌”的建议运行 toSQl() ?

【讨论】:

【参考方案2】:

这是我的错误。一个非常基本的错误。没有在 select 子句的每个参数后加上引号。

DB::table('ticket_details')
                        ->join('ticket_stages', 'ticket_stages.stage_id', '=', 'ticket_details.stage_id')
                        ->join('users_details', 'users_details.user_id', '=', 'ticket_details.assigner_id')
                        ->join('client_details', 'client_details.client_id', '=', 'ticket_details.client_id')
                        ->join('user_roles', 'user_roles.role_id', '=', 'users_details.role_id')
                        ->select('client_details.client_id', 'client_details.client_name', 'ticket_details.ticket_identifier', 'ticket_details.ticket_id', 'ticket_stages.stage_name', 'ticket_details.assigner_id', 'ticket_details.creator_id', 'ticket_details.assignee_id', 'users_details.user_name', 'user_roles.role_name')
                        ->get();

【讨论】:

以上是关于在 laravel 中加入查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中加入同一张表

如何在 Laravel 中加入来自不同主机的多个数据库

在数据表中加入数据(laravel)

如何在 laravel eloquent 中加入三个表?

如何使用 eloquent hasmanythrough 或 hasonethrough 在 laravel 中加入 3 个表

Laravel实现多模块