[英]Laravel - Eloquent: get posts from user with users post table
我搜索了很多,但找不到任何答案,所以我希望你能幫助我!
我有三個表:posts、users 和 post_users。 Post_users 包含兩列:user_id 和 post_id。
我需要使用 Eloquent 獲取用戶的所有帖子。 有任何想法嗎?
太感謝了!
(如果已經存在該問題,我很抱歉,但我還沒有找到它)
模型User
:
public function posts()
{
return $this->belongsToMany('App\Post', 'post_users', 'user_id', 'post_id');
}
模特Post
:
public function users()
{
return $this->belongsToMany('App\User', 'post_users', 'post_id', 'user_id');
}
嘗試:
$user = User::find($id);
$allpost = $user->posts()->get();
var_dump($allpost);
如果您沒有建立關系,請嘗試此操作。 但是,建立關系是首選。 PostUsers和Posts被假定為post-users和posts表的模型,並且將post作為posts表的列。 這給出了登錄用戶的帖子,但未經測試。
$postusers=PostUsers::where(['user_id'=>Auth::user()->id])->get();
foreach($postusers as $postuser)
{
$posts=Posts::where(['post_id'=>$postuser->post_id)]->get();
foreach($posts as $post)
{
print_r($post->post);
}
}
Laravel文檔很好地涵蓋了這一點,但是當我剛開始時,我也遇到了問題。 查看Laravel Relationships以獲取完整的文章。
// Inside your Post model
public function user() {
return $this->belongsTo('App\User');
}
// Inside your User model
public function posts() {
return $this->hasMany('App\Posts');
}
然后,您可以創建一個查詢:
$posts = User::find(1)->posts;
或者,您可以進一步過濾它。
$posts = User::find(1)->posts()->where('active', 1)->get();
如果模型位置和名稱不同,則可能需要更改hasMany()
和belongsTo()
路徑。
如你所願。 用戶與帖子之間的關系是多對多的
-定義的關系
// In User model
public function posts(){
return $this->belongsToMany(Post::class);
}
// In Post model
public function users(){
return $this->belongsToMany(User::class);
}
-表結構
- users
id
- posts
id
- post_user
user_id
post_id
-獲取用戶的所有帖子
$posts = User::find($user_id)->posts
嘗試這個
從控制器:
dd(Auth::user()->posts);
應用/用戶
public function posts()
{
return $this->belongsToMany('App\Entities\posts', 'post_users', 'user_id', 'post_id');
}
在用戶模型上與 post 模型建立關系:
public function posts()
{
return $this->hasMany(Post::class);
}
在 post 模型上與用戶模型建立關系:
public function User()
{
return $this->belongsTo(User::class);
}
在控制器或您使用的任何地方:
$userPosts = User::find($user->id)->posts->where('status', 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.