Предположим, у меня есть модель User
и модель Post
.Запрос коллекции «один ко многим»
class Post extends Eloquent
{
}
Есть много пользователей, и каждый User
имеет много Post
. Все Post
принадлежит к User
.
class User extends Eloquent
{
public function posts()
{
return $this->hasMany('Post');
}
}
Я знаю, что я могу получить один User
с find()
.
$user = User::find(1);
Я знаю, что из одного User
, я могу получить все свои posts()
.
$posts = User::find(1)->posts;
Однако предположим, что у меня есть несколько пользователей.
$users = User::all();
Я хочу получить доступ ко всем сообщениям, которые есть в этой коллекции пользователей. Что-то по строкам
$posts = User::all()->posts;
Это, конечно, не работает. Однако, в теории, это должно быть функционально эквивалентно
$posts = Post::all()
Есть ли способ сделать что-то подобное описанному выше в Laravel 4.2?
Я не хочу использовать Post::all()
. Причина в том, что это не то, что я хочу в более сложном примере, который включает ограничения на User
.
$postsByMaleUsers = User::where('gender', '=', 'male')->posts;
Необходимо получить все посты, сделанные пользователями-мужчинами.
Я также знаю, что я мог бы просто использовать foreach
петлю.
foreach($users->posts as $post)
{
// Process result here.
}
Однако предположим, что я пытаюсь вернуть результаты вместо обработки результатов. Например, я мог бы иметь public static function postsByMaleUsers()
в модели User
, и вызов User::postsByMaleUsers()
должен возвращать коллекцию сообщений только пользователями-мужчинами. В этом случае цикл foreach
меня не устраивает.
Привет, спасибо за решение, но, к сожалению, это выглядит как 'pluck' не реализована Laravel 4.2. Есть ли какой-либо эквивалентный метод в 4.2 или мне повезло, если вы не обновляетесь до 5? – Zsw
@Zsw - 'lists()' –