2016-08-17 5 views
0

Я много искал, но не мог найти ответа об этом, поэтому я надеюсь, что вы могли бы мне помочь!Laravel - Eloquent: получать сообщения от пользователя с пользователями стол

У меня есть три стола: сообщения, пользователи и post_users. Post_users содержит два столбца: user_id и post_id.

Мне нужно получить все сообщения пользователя с Eloquent. Любые идеи?

Большое вам спасибо!

(я извиняюсь, если уже существует этот вопрос, но я не нашел еще)

+0

вы уже построили отношения? –

+0

Настройте такие отношения, как 'ownTo' и' 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'); 
} 

Try:

$user = User::find($id); 
$allpost = $user->posts()->get(); 
var_dump($allpost); 
+0

Это работает! Спасибо! –

+0

Добро пожаловать. Это отношения многих-многих, но в вашей проблеме вы должны использовать отношения «один-два». – mydo47

1

Если выигрыш, отношения, построенные, попробуйте это. Однако предпочтительны строительные отношения. PostUsers и 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); 
     } 
} 
+0

Спасибо, но я ищу отношения. –

0

Документы 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(), если ваш расположение и имена моделей разные.

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

App/User

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

 Смежные вопросы

  • Нет связанных вопросов^_^