2016-05-23 32 views
1

我想了解左派加入雄辩,但我真的不能得到它的工作。拉拉维尔雄辩中的多个左连接

我经常SQL看起来如下:

SELECT uploads.id, comments.file_id, comments.comment, users.id, comments.user, users.name 
FROM uploads 
LEFT JOIN comments 
ON uploads.id=comments.file_id 
LEFT JOIN users 
ON users.id=comments.user; 

有人可以帮我将其转换为一个工作雄辩查询?也许提供一些信息如何完成?

谢谢! :D

+0

$评论= DB ::表( '意见') \t \t \t - > leftJoin( '用户', 'users.id' , '=', 'comments.id') \t \t \t - > leftJoin( '上传', 'uploads.id', '=', 'comments.file_id') \t \t \t - >得到(); - EDIT:让它工作感谢任何! – Sebastian

回答

0
$comments = DB::table('comments') 
       ->leftJoin('users', 'users.id', '=', 'comments.id') 
       ->leftJoin('uploads', 'uploads.id', '=', 'comments.file_id') 
       ->get(); 

这是答案,得到它的工作,无论如何谢谢!

+0

DB不是'Eloquent'和'Eloquent'不应该做'连接'。你必须依赖模型的关系。 – user2094178

1

Eloquent不会执行SQL连接,但会用很多查询来模拟它。

你会得到你想要做这算什么:

Uploads::with('commments','users') 
    ->get(['id','comments.file_id',' comments.comment', 'users.id', 'comments.user', 'users.name']); 

利用这一点,你需要显式在你的模型关系。检查文档。

另一种方法是使用查询生成器。不使用机锋这样做,而是将工作当然:

DB::table('uploads') 
    ->select('uploads.id','comments.file_id',' comments.comment', 'users.id', 'comments.user', 'users.name') 
    ->leftJoin('comments','uploads.id','=','comments.file_id') 
    ->leftJoin('users','users.id','=','comments.user') 
    ->get(); 
+0

谢谢,我决定采用querybuilder的方式,现在我又有了一个简单的问题。我如何从一行中选择1个值?例如只有ID? get('id')给我一个错误。这是我到目前为止: $ id = DB :: table('uploads') - > where('file','like',$ file。'%') - > get('id'); – Sebastian

+0

编辑为您的新问题。使用'select(...)'和你想要的字段。如果你只想从第一行获得一个值,那就用'value('uploads.id')'代替。更多在这里:https://laravel.com/docs/5.1/queries –