Php 优化集合筛选

Php 优化集合筛选,php,laravel,eloquent,Php,Laravel,Eloquent,我有3个模型:帐户-合作伙伴-用户,其中有3个属于任何关系(帐户\用户,帐户\合作伙伴)。我想筛选所有用户合作伙伴,由用户帐户授权 我已经编写了基本的foreach循环hell,我想问一些优化这个过滤的技巧(比如避免n+1和其他问题) 您可以这样做: Controller.php $userPartners = collect(); auth()->user()->accounts->each(function($account) use ($userPartners) {

我有3个模型:帐户-合作伙伴-用户,其中有3个属于任何关系(帐户\用户,帐户\合作伙伴)。我想筛选所有用户合作伙伴,由用户帐户授权

我已经编写了基本的foreach循环hell,我想问一些优化这个过滤的技巧(比如避免n+1和其他问题)


您可以这样做:

Controller.php

$userPartners = collect();
auth()->user()->accounts->each(function($account) use ($userPartners) {
    $account->partners->each(function($partner) use ($userPartners) {
        if(!$userPartners->contains('id', $partner->id)) $userPartners->push($partner);
    });
});
dd($userPartners);

首先,通过
load
加载您的关系。这将避免出现
N+1
问题:

$user = auth()->user()->load('accounts');
$userPartners = [];

$user->accounts->each(function ($account) use ($userPartners) {
    $ids =  $account->partners->pluck('id');
    if (!in_array($account->id, $ids)) {
        $userPartners[] = $account->partners->where('id', $account->id);
    }
});

请正确缩进代码
auth()->user
不存在
user()
是用于
auth()
帮助程序的方法。
$user = auth()->user()->load('accounts');
$userPartners = [];

$user->accounts->each(function ($account) use ($userPartners) {
    $ids =  $account->partners->pluck('id');
    if (!in_array($account->id, $ids)) {
        $userPartners[] = $account->partners->where('id', $account->id);
    }
});