繁体   English   中英

查询一对多关系的集合

[英]Querying a Collection of One-to-Many Relationship

假设我有一个User模型和一个Post模型。

class Post extends Eloquent 
{

}

有很多用户,每个User有很多Post 所有Post属于一个User

class User extends Eloquent 
{
    public function posts()
    {
        return $this->hasMany('Post');
    }
}

我知道我可以通过find()获得一个User

$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.
}

但是,假设我试图返回结果而不是处理结果。 例如,我可以在User模型中有一个public static function postsByMaleUsers() ,调用User::postsByMaleUsers()应该只返回男性用户的帖子集合。 在这种情况下, foreach循环不适合我。

急切地加载帖子,然后使用pluckcollapse来获得一个扁平的帖子集合:

$users = User::with('posts')->where('gender', 'male')->get();

$posts = $users->pluck('posts')->collapse();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM