![](/img/trans.png)
[英]How to update in Laravel Eloquent (HasMany Relationship)
[英]How to filter entries via hasMany relationship in Laravel
我正在嘗試使用Laravel(當前版本是5.7)編寫一個網站,並且我有3種模型:Post,User和Fav。 我使用一種簡單的形式將帖子添加到“收藏夾”表中,該表有3列; id,user_id和post_id。 我想列出用戶添加了收藏夾的帖子,但我不能正確使用“ hasMany”方法。
我可以使用像這樣的變量: $ post-> user-> name,但我不知道如何使用與“收藏夾”表的關系。
郵政模型
public function user() {
return $this->belongsTo('App\User');
}
public function favs() {
return $this->hasMany('App\Fav');
}
最愛模型
public function users() {
return $this->hasMany('App\User');
}
public function posts() {
return $this->hasMany('App\Post', 'post_id', 'id');
}
用戶模型
public function posts() {
return $this->hasMany('App\Post');
}
public function favs() {
return $this->hasMany('App\Fav');
}
調節器
public function user($id){
$favs = Fav::orderBy('post_id', 'desc')->get();
$user = User::find($id);
$posts = Post::orderBy('id', 'desc')->where('user_id', $id)->where('status', '4')->paginate(10);
return view('front.user')->with('user', $user)->with('posts', $posts)->with('favs', $favs);
}
Fav
模型只有一個User
和Post
,因此您需要使用belongsTo()
而不是hasMany
並將方法名稱更改為單數。 您還可以刪除post()
中的其他參數,因為它們是默認值。
public function user() {
return $this->belongsTo('App\User');
}
public function post() {
return $this->belongsTo('App\Post');
}
加載用戶喜歡的所有Post
:
$user->favs()->with('post')->get();
with()
方法用於渴望加載關系 。
現在您可以遍歷Fav
:
@foreach($favs as $fav)
{{ $fav->post->name }}
@endforeach
我認為您可以將代碼的這兩行更改為
$posts = Post::orderBy('id', 'desc')->where('user_id', $id)->where('status', '4')->paginate(10);
return view('front.user')->with('user', $user)->with('posts', $posts)->with('favs', $favs);
至
$posts = Post::where('user_id', $id)->where('status', '4')->latest()->paginate(10);
return view('front.user', compact('user', 'posts', 'favs'));
為了檢索用戶喜歡的帖子,
如果您將fav表更改為僅用於處理Post和User之間的多對多關系的數據透視表,則可以將其獲取為$user->posts
,對於單獨的模型,我認為您可以考慮使用$user->favs
並查看
在收藏夾模型中
public function user() {
return $this->belongsTo('App\User');
}
public function post() {
return $this->belongsTo('App\Post');
}
並鑒於
@foreach ( $user->favs as $fav )
{{ $fav->post->id }}
@endforeach
例如,如果一個用戶有多個收藏夾,則需要使用迭代塊,例如foreach。
例:
foreach($user->favs as $fav) {
dd($fav) // do something
}
附注:請注意不要混淆hasMany和belongsToMany。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.