我在将此查询从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();
答案 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。