2016-08-17 3 views
0

많이 검색했지만 그것에 대한 답변을 찾을 수 없으므로 도와주세요.Laravel - Eloquent : 사용자가 올린 게시물을 게시 하시겠습니까?

게시물, 사용자 및 post_users 세 개의 테이블이 있습니다. Post_users에는 user_id와 post_id의 두 열이 있습니다.

사용자가 Eloquent로 모든 게시물을 가져올 필요가 있습니다. 아이디어가 있으십니까?

정말 고마워요! 당신이 내장 된 관계를 가지고이 donot 경우이 시도

+0

는 이미 관계가 구축합니까? –

+0

'belongsTo'와'hasMany'와 같은 관계를 설정하면 바람이 불 수 있습니다. – Loek

+0

아니요. 어떤 관계와 어떤 모델을 설정해야합니까? 감사! –

답변

1

모델 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); 
+0

그것은 작동합니다! 고맙습니다! –

+0

당신을 진심으로 환영합니다. 이것은 다 대 다 관계지만 문제는 일대 다 관계를 사용해야합니다. – mydo47

1

은 (이미 그 질문이있는 경우 미안 해요,하지만 난 아직 발견되지 않았다). 그러나 관계를 구축하는 것이 바람직합니다. 포스트 사용자와 포스트는 포스트 사용자와 포스트 테이블의 모델로 가정되며 포스트 테이블의 컬럼으로 게시됩니다. 이것은 로그인 한 사용자의 게시물을 제공하지만 테스트하지는 않습니다.

$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); 
     } 
} 
+0

고마워요,하지만 관계를 찾고 있어요 –

0

Laravel docs는이 문제를 매우 잘 설명하지만 처음 시작했을 때 문제가있었습니다. 완전히 기록하려면 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() 경우에 대한 귀하의 경로를 변경해야 할 수도 있습니다 귀하의 모델 위치와 이름이 다릅니다.

1

원하는대로.사용자와 포스트 사이의 관계는 다 대다

- 정의 관계

// 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 
+0

많은 사용자가 게시물을 편집 할 수 있기 때문에 post_users를 만들었습니다. 따라서 사용자는 많은 게시물을 가질 수 있고 게시물은 많은 사용자를 가질 수 있습니다 –

+0

편집 됨. 이름 컨벤션 돌봐 – KmasterYC

1

보십시오이

컨트롤러에서

:

dd(Auth::user()->posts); 

앱/사용자

public function posts() 
    { 
     return $this->belongsToMany('App\Entities\posts', 'post_users', 'user_id', 'post_id'); 
    }