在Laravel中构建复杂的连接查询

时间:2014-10-16 08:09:02

标签: sql join laravel builder

假设我有一个用于存储我网站上所有菜单的表,包括下拉选项中的选项,如下表所示。我希望从后端管理员轻松管理菜单。

注意:我正在缓存所有菜单以避免命中数据库。

Table 1: tbl_menus

id   name                                slug                              type
------------------------------------------------------------------------------------               
 1   Accounting / Audit / Tax            accounting-audit-tax              industry
 2   Administration & Office Support     administration-office-support     industry
 3   Construction                        construction                      industry 
 4   Male                                male                              sex
 5   Female                              female                            sex
 6   Full Time                           full-time                         job-type
 7   Contract                            contract                          job-type
 8   Interim                             interim                           job-type                         

表2:tbl_jobs

id   title                                job_type_menu_id            job_industry_menu_id                          
---------------------------------------------------------------------------------------------              
 1   System Administrator                 6                           1
 2   Solaris Admin                        6                           3
 3   IT Support Engeer                    7                           1 

我想要的: 我试图通过使用下面的查询将tbl_menus表连接到tbl_jobs表,以便访问菜单单元格,如tbl_menus.name,tbl_menus.slug,tbl_menus.type

DB::table('tbl_menus')
 ->join('tbl_menus', 'tbl_jobs.job_type_menu_id',     '=', 'tbl_menus.id')
 ->join('tbl_menus', 'tbl_jobs.job_industry_menu_id', '=', 'tbl_menus.id')
 ->select('tbl_jobs.id', 'tbl_jobs.title', 'tbl_menus.name', 'tbl_menus.slug');

我已经尝试过这个查询,并且没有任何结果。

我相信你对我希望实现的目标有了更清晰的了解。您的专家解决方案将不胜感激。

注意:我需要选择这个菜单或加入工作的原因是让我做这样的事情:

@foreach($jobs as $job)
  {{$job->job_type->name}} prints name instead of printing just ID
  {{$job->industry->name}}
@endforeach

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试加入与您正在使用的表相同的表格。

DB::table('tbl_menus')
 ->join('tbl_menus', 'tbl_jobs.job_type_menu_id',     '=', 'tbl_menus.id')
 ->join('tbl_menus', 'tbl_jobs.job_industry_menu_id', '=', 'tbl_menus.id')
 ->select('tbl_jobs.id', 'tbl_jobs.title', 'tbl_menus.name', 'tbl_menus.slug');

试试这个

DB::table('tbl_menus')
 ->join('tbl_jobs', 'tbl_jobs.job_type_menu_id',     '=', 'tbl_menus.id')
 ->join('tbl_jobs', 'tbl_jobs.job_industry_menu_id', '=', 'tbl_menus.id')
 ->select('tbl_jobs.id', 'tbl_jobs.title', 'tbl_menus.name', 'tbl_menus.slug');