2015-03-18 2 views
0

Поэтому у меня есть приложение, как щебет, но я хочу, чтобы «стена», чтобы сообщения от всех пользователей, но чтобы быть отфильтрованы по интересам текущего пользователя ...Фильтры сообщений по пользователям?

Я хочу что-то вроде следующего:

$posts = PostModel::with('interests')->latest()->get(); 
$user = UserModel::find(Auth::user()->id); 

    foreach ($posts as $post) { 

     foreach($user->interests as $interest){ 

      return only the posts that have the interest_id that matches 
      the user's interest_ids 

     } 

    } 

Это моя UserModel интересы функции:

public function interests() { 

    return $this->belongsToMany('InterestModel', 'users_interests', 'user_id', 'interest_id')->withPivot('interest_id'); 
} 

Это мой PostModel интерес функция:

public function interests() { 

    return $this->belongsToMany("InterestModel", 'post_interest', 'post_id', 'interest_id'); 

} 

Я просто не могу понять, как бы я сортировал и возвращал сообщения?

Благодаря

Matt

ответ

1

Легкий способ:

как $ user-> интересы соответствующих $ posts-> интересы является коллекция (http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html).

Чтобы проверить, имеет ли интерес процентная ставка, почему бы не проверить, есть ли в этой коллекции: $ posts-> interest-> has ($ interest);


Но в целом цикл в PHP имеет плохую производительность по сравнению с SQL. Так почему бы не выбрать только соответствующие должности в первую очередь?

$userInterests = UserModel::user_interest()->list('id'); 
$postWithInterest = PostModel::whereHas('post_interest', function($q) 
{ 
    $q->whereIn('id', $userInterest); 
})->get(); 

Хотя код выше не проверен, я надеюсь, что он может показать основную идею.

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