Laravel Красноречивый. Пытаюсь пересечь две промежуточные таблицы. Есть ли более эффективный запрос, чем этот? - PullRequest
1 голос
/ 06 мая 2020

Laravel Красноречивый. Пытаюсь пересечь две промежуточные таблицы. Есть ли более эффективный запрос, чем этот?

Модель устройства:

public function products()
{
    return $this->belongsToMany('App\Product');
}

public function users()
{
    return $this->belongsToMany('App\User');
}

Модель продукта:

public function units()
{
    return $this->belongsToMany('App\Unit');
}

public function users()
{
    return $this->belongsToMany('App\User');
}

Модель пользователя:

public function units()
{
    return $this->belongsToMany('App\Unit');
}

public function products()
{
    return $this->belongsToMany('App\Product');
}

Query Eloquent:

Product::get()

->filter(function ($product) {
    return $product->units
                    ->pluck('id')
                    ->intersect(auth()->user()->units->pluck('id'))
                    ->isNotEmpty();
})

Я пытаюсь получить весь продукт, где единица продукта равна единице входа пользователя


UPDATE

I думаю, что код ниже более чистый

Product::whereHas('units', function (Builder $query) {
    $query->where([
        'units.id' => auth()->user()->units->pluck('id'),
    ]);
})->get();

1 Ответ

0 голосов
/ 06 мая 2020

Думаю, ваши решения выглядят оптимальными! Похоже, что способ сравнения атрибутов из двух сводных таблиц

Product::with('users')
        ->with('units')
        ->compareAttributesFromPivotTables('attribute_a','attribute_b')
        ->get();

еще не реализован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...