如何将用户元素添加到用户集合

时间:2019-05-02 13:30:54

标签: php laravel collections foreach push

我有用户和场所。 在表user_venue中,我存储了多个连接(manyToMany)

$rUsers = \DB::table('user_venue')->where('venue_id',$user->id)->get();

$resUsers = collect();

foreach ($rUsers as $key => $i) {
    $id = $i->user_id;
    $u = User::findOrFail($id);
    $resUsers->push($u);
}

如您所见,我想将user模型存储到集合$resUser中,但是它向我返回错误页面,并且不加载视图... 为什么?

2 个答案:

答案 0 :(得分:2)

当您$u->push($resUsers)时,您尝试插入单个User记录/实例。我相信您想改为执行以下操作:

$resUsers->push($u);

这会将单个User记录推入$resUsers集合中。

答案 1 :(得分:1)

如果您有多对多关系,并且想加载与给定User链接的Venue,那么为什么不使用关系呢? 效率更高,因为您仅一次访问数据库,而不是实际策略。

# Venue.php

public function users()
{
    return $this->belongsToMany(User::class);
}

然后在您的控制器中:

# VenueController.php

public function myFunction(Request $request)
{
    $venue = Venue::find('your-venue-id'); // getting a venue
    $users = $venue->users; // <-----

    return view('users')->with('users', $users);
}

在上面的代码中,$users变量是Collection的实例,据我所知,该变量包含User个模型的集合,这些集合与查询匹配输出。