猿问

Laravel 使用数据透视表选择记录

我的口才有点问题。我有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); 存在一些问题。


结论:我只需要在短语页面中显示我的短语。每个用户都必须有自己的短语。


慕森王
浏览 125回答 2
2回答

蝴蝶不菲

$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]);

一只萌萌小番薯

尝试使用小写分页$phrases = DB::table('phrases')->orderBy('id','desc')->paginate(5);
随时随地看视频慕课网APP
我要回答