【问题标题】:Laravel select records with pivot tableLaravel 使用数据透视表选择记录
【发布时间】:2020-08-19 09:42:11
【问题描述】:

我的口才有点问题。我有 3 张桌子。 Usersphrasesphrase_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();这只是项目的数组。
  • 非常感谢。你真的帮了我...

标签: php sql database laravel eloquent


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2015-02-14
      • 1970-01-01
      • 2017-05-09
      • 2019-04-27
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多