2016-01-13 101 views
1

我有很多問題將這個查詢從MYSQL轉換爲laravel查詢生成器......有人能幫我弄明白嗎? 我試圖解析實際用戶的所有項目(我將在稍後用實際用戶替換1值),ID存儲在不同的基礎上,這些基礎具有projets的id,用戶的id和公司的id。Laravel:將SQL查詢轉換爲查詢生成器有很多問題

- SQL

SELECT * 
FROM projets, companies, users, userscompaniesprojets 

WHERE 1 = userscompaniesprojets.id_user 

AND companies.id = userscompaniesprojets.id_companies 

AND userscompaniesprojets.id_projet = projets.id; 

- Laravel

$companies = DB::table('projets', 'userscompaniesprojets', 'companies') 
      ->where('userscompaniesprojets.id_user', '=', '1') 
      ->where('companies.id', '=', 'userscompaniesprojets.id_companies') 
      ->where('userscompaniesprojets.id_projet', '=', 'projets.id') 
      ->get(); 
+1

當你運行這個查詢時,你會得到什麼? –

回答

1

如果你看看你的查詢的輸出通過toSql方法

DB::table('projets', 'userscompaniesprojets', 'companies')-> 
where('userscompaniesprojets.id_user', '=', '1')-> 
where('companies.id', '=', 'userscompaniesprojets.id_companies')-> 
where('userscompaniesprojets.id_projet', '=', 'projets.id')-> 
toSql(); 

你「L -l查看導致SQL是

select * from "projets" 
where "userscompaniesprojets"."id_user" = ? and 
"companies"."id" = ? and "userscompaniesprojets"."id_projet" = ? 

這是由於table方法只考慮單個表看到API docs

你需要利用構建此查詢看到docs再次當加入的。

我覺得這樣的事情會完成你想要

DB::table('projets')-> 
join('usercompaniesprojects', 'userscompaniesprojets.id_user', '=', '1')-> 
join('companies', 'companies.id', '=', 'userscompaniesprojets.id_companies')-> 
where('userscompaniesprojets.id_projet', '=', 'projets.id'); 

導致

select * from "projets" 
inner join "usercompaniesprojects" on "userscompaniesprojets"."id_user" = "1" 
inner join "companies" on "companies"."id" = "userscompaniesprojets"."id_companies" 
where "userscompaniesprojets"."id_projet" = ? 

欲瞭解更多有關調試查詢在Laravel看看這個article什麼。