Laravel 4/Eloquent ORM: только объекты с реляционными объектами

У меня есть продукты и статьи. Статья принадлежит продукту, поэтому у меня есть отношение hasMany-Relationship в моем классе продуктов и отношение ownTo в моем классе статей.

Хорошо, теперь я могу получить все статьи определенного продукта. Но мне нужно следующее:

Я хочу отображать только те продукты, которые получили хотя бы одну статью. Должен ли я использовать для этого db-запрос или я могу использовать для этого красноречивые механизмы?

Заранее спасибо.

С Уважением


person pyran1208    schedule 28.11.2013    source источник


Ответы (1)


Ознакомьтесь с областями действия http://laravel.com/docs/eloquent#query-scopes для многократного использования методов where. Это позволит вам сделать:

Products::hasArticles()->get();

Если вы хотите выполнить это для отношения, вот выдержка из http://laravel.com/docs/eloquent#relationships:

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

$comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();

Таким образом, вместо вызова Post::find(1)->comments вы используете полный метод comments() для получения запроса, что позволит вам добавить к нему свои собственные ограничения (даже определенную область в ссылке, упомянутой выше) и получить данные через first() или get() и т. д.

person SamV    schedule 28.11.2013
comment
Я думал, что сложно. Функциональность области мне очень помогла, и мне просто нужен sql-запрос с соединением. Спасибо за ответ! - person pyran1208; 29.11.2013