Laravel 将动态数量的集合合并在一起
我正在做我的第一个拉威尔项目:家谱。我有4个家族分支,每个分支都有人/家族/图片/故事/等等。网站上的某个给定用户将可以访问家族中1、2或4个分支的所有内容(我不想为与他们无关的人显示表亲的内容) 因此,在不同的页面上,我希望控制器的集合包含基于给定用户权限的内容。合并似乎是正确的方法 我有一个范围可以从家庭的每个分支中找到人,在下面的例子中,我也有一个范围可以找到这个月有生日的人。为了给这个用户显示一组正确的生日,我可以通过单独合并每个组(如果他们有访问权限的话)来实现 如果我向所有4个家族分支中的每个人展示我的函数,我的函数会是这样的:Laravel 将动态数量的集合合并在一起,laravel,collections,merge,eloquent,Laravel,Collections,Merge,Eloquent,我正在做我的第一个拉威尔项目:家谱。我有4个家族分支,每个分支都有人/家族/图片/故事/等等。网站上的某个给定用户将可以访问家族中1、2或4个分支的所有内容(我不想为与他们无关的人显示表亲的内容) 因此,在不同的页面上,我希望控制器的集合包含基于给定用户权限的内容。合并似乎是正确的方法 我有一个范围可以从家庭的每个分支中找到人,在下面的例子中,我也有一个范围可以找到这个月有生日的人。为了给这个用户显示一组正确的生日,我可以通过单独合并每个组(如果他们有访问权限的话)来实现 如果我向所有4个家族分
public function get_birthday_people()
{
$user = \Auth::user();
$jones_birthdays = Person::birthdays()->jones()->get();
$smith_birthdays = Person::birthdays()->smith()->get();
$lee_birthdays = Person::birthdays()->lee()->get();
$brandt_birthdays = Person::birthdays()->brandt()->get();
$birthday_people = $jones_birthdays
->merge($smith_birthdays)
->merge($lee_birthdays )
->merge($brandt_birthdays );
return $birthday_people;
我的挑战:我想修改它,这样我就可以检查用户的访问权限,并且只相应地添加每个组的人。我在想象一些事情,除了我添加了如下条件外,一切都与上面一样:
if($user->jones_access) {
$jones_birthdays = Person::birthdays()->jones()->get();
}
else{
$jones_birthdays =NULL;
}
但是对于没有访问权限的用户来说,这会引发一个错误,因为我不能在NULL上调用merge(或者空数组,或者我尝试过的其他版本的'nothing')
这样做的好方法是什么?
if($user->jones_access) {
$jones_birthdays = Person::birthdays()->jones()->get();
}
else{
$jones_birthdays = new Collection;
}
更好的是,在条件中进行合并,而不需要其他条件
$birthday_people = new Collection;
if($user->jones_access) {
$birthday_people->merge(Person::birthdays()->jones()->get());
}
您希望您的雄辩的查询只返回请求它的用户的相关数据。当琼斯的人访问该页面时,查询李的生日是没有意义的 所以你最终会做的是
$birthdays=App\Person::where('family',$user->family)->get()代码>
这会将其家庭属性等于当前用户家庭的人员拉入
这可能与你现在处理人际关系的方式不符,但希望它能让你走上正确的轨道,解决问题
如果您真的想继续进行一系列查询和检查授权,请阅读Laravel的功能。它将允许您为用户分配能力并轻松检查。谢谢Brynn!用户可以访问多达4个家庭分支,所以我可能需要一些阵列或其他东西。。。感谢您提供关于授权的链接-看起来这更适合于操作,而不是过滤数据,但我相信这会有所帮助!与此同时,另一个答案让我振作起来,所以我很乐意去。谢谢是的,就是这个!!!两种方法都有效,第二种方法更短/更干净。非常感谢你的帮助!合并辅助对象覆盖具有相同ID的元素: