use*_*369 16 php laravel eloquent laravel-4
我正在尝试从一个表中选择所有结果,并在用户ID匹配时与另一个表合并.
我有三个表:运行,用户和run_user数据透视表.我想从数据库表中的"运行"和其他列中选择所有结果("已完成","粘性","最后一次"和"难度"),但仅从当前用户的run_user中提取数据.
在原始SQL中,我设法通过带有AND语句的LEFT JOIN来完成此操作:
SELECT
runs.startpoint,
runs.startpostcode,
runs.endpoint,
runs.endpostcode,
run_user.completed,
run_user.sticky,
run_user.last_tested,
run_user.difficulty
FROM runs
LEFT JOIN run_user ON run_user.run_id=runs.id AND run_user.user_id = '2'
Run Code Online (Sandbox Code Playgroud)
有关如何通过查询生成器执行此操作的任何建议?我可以在Laravel 4中进行LEFT JOIN,但也无法弄清楚如何将它与AND语句结合起来.
任何帮助表示赞赏.
谢谢!
Ale*_*ult 34
根据您的要求,这是您使用查询构建器进行查询的方式:
DB::table('runs')
->leftJoin('run_user', function($join)
{
$join->on('run_user.run_id', '=', 'runs.id')
->on('run_user.user_id', '=', '2');
})
->get();
Run Code Online (Sandbox Code Playgroud)
但是这个JOIN语句看起来有点奇怪,你可能想把它变成一个普通的WHERE(除非你有一个非常具体的理由直接在JOIN子句中过滤).
DB::table('runs')->join('run_user', 'run_user.run_id', '=', 'runs.id')->where('run_user.user_id', '=', '2')->get();
Run Code Online (Sandbox Code Playgroud)
文档:http://laravel.com/docs/queries#joins
如果有人想知道我在其中一个leftJoin参数上使用DB :: raw工作:
DB::table('runs')
->leftjoin('run_user', 'runs.id','=',
DB::raw('run_user.run_id AND run_user.user_id = ' . $user->id))
->get();
Run Code Online (Sandbox Code Playgroud)
它并不像我希望的那样"雄辩",但没有一个正常的'andOn'条件,如果你想在LEFT JOIN中添加AND,这似乎是唯一的方法.
如果有人能建议我更喜欢的整洁方式!
谢谢
小智 5
用这个
DB::table('runs')->select('runs.startpoint','runs.startpostcode','runs.endpoint','runs.endpostcode','run_user.completed','run_user.sticky','run_user.last_tested','run_user.difficulty')
->leftJoin('run_user', function($join)
{
$join->on('run_user.run_id', '=', 'runs.id')
->where('run_user.user_id', '2');
})
->get();
Run Code Online (Sandbox Code Playgroud)
在 Laravel 4 中,您可以使用 Eloquent 查询来完成此操作。我假设您了解 Eloquent 关系并知道创建模型。对于您的查询应该是
RunUser::where('user_id',$id)->leftjoin('runs','runs.id','=','run_user.run_id')->first();
Run Code Online (Sandbox Code Playgroud)
注意RunUser 是 run_user 表的模型。
| 归档时间: |
|
| 查看次数: |
44379 次 |
| 最近记录: |