【发布时间】:2017-03-09 09:32:55
【问题描述】:
我想使用带有 where 条件的 laravel 查询构建器进行左外连接。 我有 3 张桌子:
- 用户(ID、姓名、..)
- 路线(ID、姓名、..)
- user_route (id, user_id, route_id)
我只想为特定用户选择 user_route 表中未列出的所有路由。
我尝试过的:
$q = DB::table('route')
->join('user_route', 'route.id', '=', user_route.route_id', 'left outer')
->where('user_route.user_id', '!=', $filter->user);
这将不返回任何行。
$q = DB::table('route')
->leftJoin('user_route', function($join) use ($filter)
{
$join->on('route.id', '=', 'user_route.route_id')
->where('user_route.user_id', '=', DB::raw($filter->user));
});
这将返回所有路由,因为它不是外部连接。
也试过这样的:
$q = DB::table('route')
->join('user_route', function($join) use ($filter)
{
$join->on('route.id', '=', 'user_route.route_id')
->where('user_route.user_id', '=', DB::raw($filter->user));
}, 'left outer');
或
$q = DB::table('route')
->join('user_route', function($join) use ($filter)
{
$join->on('route.id', '=', 'user_route.route_id', 'left outer')
->where('user_route.user_id', '=', DB::raw($filter->user));
});
它们都不起作用。
我做了一个丑陋的解决方法,我选择所有带有左连接的路由,并在 PHP 中删除 user_id 不为 NULL 的路由(例如存在)。
有谁知道如何在不使用 SQL 并将其传递给 Eloquent(或 Laravel 的数据库插件的名称)的情况下进行此类查询?
【问题讨论】:
标签: php laravel laravel-5 eloquent