Laravel:将SQL查询转换为查询构建器时遇到很多问题

时间:2016-01-13 10:06:45

标签: php mysql laravel laravel-5.1

我在将此查询从MYSQL转换为laravel查询构建器时遇到了很多问题...有人可以帮我搞清楚吗? 我正在尝试解析实际用户的所有项目(我将在以后用实际用户替换1值),id存储在具有projets id,用户id和其他基础的不同基础上公司的ID。

- 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 个答案:

答案 0 :(得分: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();

您将看到生成的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