2015-02-25 2 views
0

У меня вопрос о том, как получать связанные должности определенного сообщения по категориям с помощью Eloquent. Я знаю, как это сделать в чистом MySQL, но я уверен, что у Eloquent будет более приятная альтернатива.Как я могу получить связанные сообщения (по категориям) с Eloquent?

Моих таблиц: Сообщения категория post_category (стержень)

Я сделал красноречивое соединение необходимого, так что я хочу сделать что-то вроде: $post->categories()->posts()->exclude($post)->get().

Конечно, это не сработает. Я получаю сообщение об ошибке в сообщениях(), потому что «Builder не имеет сообщений методов()», но, надеюсь, вы получите эту идею. Как бы вы это сделали с «Красноречием»?

+0

Это, вероятно, что-то вроде 'Category :: whereIn ($ post-> categories-> lists ('id')) -> posts() -> get()'. – ceejayoz

+0

Да, что-то вроде этого может работать, но это дает мне ошибку 'Call to undefined method Illuminate \ Database \ Query \ Builder :: posts()' – barakuda28

ответ

0

Один из запутанных деталей об отношениях красноречивых является то, что метод на модели, которая определяет отношение вернет объект отношения при вызове, как вы вызываете его:

$posts->categories(); 

Чтобы вернуть коллекцию категория моделей, прикрепленные к вашим постам вы должны использовать что-то вроде этого:

Post::find(primary key of post)->categories; 

Или получить все сообщения и перебирать модели индивидуально:

$posts = Post::all(); 

foreach($posts as $post) { 
    $post->categories; 
} 

Вот ресурс я нашел очень полезным в обучении, чтобы использовать методы Relation красноречивый в: http://codeplanet.io/laravel-model-relationships-pt-1/

+0

Я не могу вызывать '-> categories' в коллекции. Кажется, что это не так. – barakuda28

+0

Вы правы. Вам понадобится модель ваших сообщений для работы. См. Мои исправления для моих исправлений. – IndianAg0711

1

Трудно сказать, что вы хотите достичь, бот, вероятно, вы хотите получить:

Posts::whereIn('id', $post->categories()->lists('id'))->whereNot('id',$post->id)->get(); 
Смежные вопросы