избегать двусмысленности, используя область laravel - PullRequest
0 голосов
/ 07 января 2020

Я создаю проект в Laravel, в котором у каждой компании есть много отделов ... у каждого отдела есть определенное количество Местоположений, и у каждого Местоположения есть назначенные устройства!

Возможно, что разные компании используют Платформа Я создал глобальную область видимости, которая в основном фильтрует результаты по company_id:

class CompanyScope implements Scope
{
    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $builder
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        return $builder->where('company_id', auth()->user()->company_id);
    }
}

Все хорошо с этим, и он фильтруется должным образом, пока я не пытаюсь достичь следующего:

Departments::withCount(['locations','devices'])->get();

В этот момент я получаю сообщение об ошибке, в котором говорится, что столбец company_id является неоднозначным. Это происходит потому, что у всех таблиц departments, location и devices есть столбец company_id и последний запрос. при использовании области не указывается имя таблицы.

Есть ли способ добавить имя таблицы в условие области?

1 Ответ

0 голосов
/ 08 января 2020

Привет, если кто-то найдет сомнение в будущем ... если вы хотите указать таблицу в Scope, вы можете просто сделать $model->getTable():

class CompanyScope implements Scope
{
    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $builder
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @return void
     */
    public function apply(Builder $builder, Model $model)
    {
        return $builder->where($model->getTable().'.company_id', auth()->user()->company_id);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...