Laravel 使用数据透视表选择记录
Posted
技术标签:
【中文标题】Laravel 使用数据透视表选择记录【英文标题】:Laravel select records with pivot table 【发布时间】:2020-08-19 09:42:11 【问题描述】:我的口才有点问题。我有 3 张桌子。 Users
、phrases
和 phrase_user
。
短语用户包含列:id, phrase_id, user_id
例如,我需要选择带有数据透视表的短语。
此操作与 SQL 将是这样的......
SELECT phrase FROM phrases
LEFT JOIN phrase_user ON phrases.id = phrase_user.phrase_id
LEFT JOIN users ON phrase_user.user_id = $userId
这是我在控制器中的索引函数
$phrases = DB::table('phrases')->orderBy('id','desc')->Paginate(5);
$user = Auth::user();
return view('pages.phrases.index')->with(['phrases' => $phrases, 'user' => $user]);
我也在模型中编写了这些函数... 短语模型:
public function users()
return $this->belongsToMany('App\User')->withTimestamps();
用户模型:
public function phrases()
return $this->belongsToMany('App\Phrase')->withTimestamps();
在这种情况下,分页器无法正常工作,因为$phrases = DB::table('phrases')->orderBy('id','desc')->Paginate(5);
有一些问题..
总结:我只需要在短语页面中显示我的短语。每个用户都必须有他们的短语。
【问题讨论】:
我想你可以这样做$user->phrases()->>orderBy('id','desc')->paginate()
你以前试过这样做吗?
在这种情况下如何调用分页?而不是 $phrases->links() 这个?
@lukatatrishvili 你不需要打电话给links()
。如果您希望分页中的项目没有所有分页额外属性,那么您应该能够将其发送到您的视图$phrases >items()
;这只是项目的数组。
非常感谢。你真的帮了我...
【参考方案1】:
$userId = 2;
$phrases = DB::table('phrases')->whereHas('users', function ($q) use ($userId)
$q->whereId($userId);
)->orderBy('id','desc')->Paginate(5);
$user = Auth::user();
return view('pages.phrases.index')->with(['phrases' => $phrases, 'user' => $user]);
【讨论】:
【参考方案2】:尝试使用小写分页
$phrases = DB::table('phrases')->orderBy('id','desc')->paginate(5);
【讨论】:
以上是关于Laravel 使用数据透视表选择记录的主要内容,如果未能解决你的问题,请参考以下文章