如果集合有关系,为什么Collections方法'包含'不起作用?

时间:2017-04-21 19:02:27

标签: laravel collections contains

例如:

$users = User::all();

$user = User::find(1)->get();

$sameUser = User::find(1)->with('roles')->get();

$user->is($sameUser) // true

$users->contains($user) // true

$users->contains($sameUser) // false

对于所有三项检查,它是否应该返回?

2 个答案:

答案 0 :(得分:0)

并不是因为它没有处理这种关系,而是因为get()电话搞乱了。 find()返回用户的实例,并实际调用引擎盖下的User::where('id', '=', $id)->first();,以便以下所有内容返回true:

$users = User::all();

$user = User::find(1);

$sameUser = User::with('roles')->find(1);

$user->is($sameUser) 

$users->contains($user)

$users->contains($sameUser)

答案 1 :(得分:0)

https://github.com/laravel/framework/issues/18902

  

从技术上讲,如果一个人已经加载了,那么这些对象就不一样了   关系,而另一方则没有。虽然他们可能代表   数据库中的同一行,PHP无法知道。

     

在这种情况下,您可能会根据主键进行操作。