Панель администратора БЭКПАКА Laravel. Анонимное использование глобальных областей

#php #laravel #laravel-backpack #global-scope

#php #laravel #laravel-backpack #глобальная область

Вопрос:

Панель администратора БЭКПАКА Laravel. я хочу использовать анонимные глобальные области. вот ссылка. У меня есть две таблицы (users , accounts_profiles), на скриншоте ниже вы можете видеть, что в accounts_profiles у нас есть столбец user_id.

ТАБЛИЦА ПРОФИЛЯ УЧЕТНОЙ ЗАПИСИ
ПОЛЬЗОВАТЕЛЬСКАЯ ТАБЛИЦА

сначала позвольте мне объяснить вам. Этот код я помещаю в пользовательскую модель.

 protected static function boot(){
    parent::boot();
    $userId = 1;
    static::addGlobalScope('users', function (Builder $builder) use ($userId) {
      return  $builder->where('users.id', $userId);
    });
}
  

И это дало мне эту запись в панели администратора.(потому что я извлекаю только запись user_id «1»)
ЗАПИСИ

но теперь я хочу объединить две таблицы (users , accounts_profiles). Я знаю, что мы напишем запрос в пользовательской модели.

 protected static function boot(){
    parent::boot();
    $userId = 1;
    static::addGlobalScope('users', function (Builder $builder) use ($userId) {
      return  $builder->join("accounts_profiles_biz", 'users.id', '=', 'accounts_profiles_biz.user_id');
    });
}
  

но я получаю эту ошибку.

 response_message: [
{
code: 9997,
message: "SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "id" is ambiguous LINE 1: ...s"."id" = "accounts_profiles_biz"."user_id" where "id" = $1 ... ^ (SQL: select * from "users" inner join "accounts_profiles_biz" on "users"."id" = "accounts_profiles_biz"."user_id" where "id" = 1 and "users"."deleted_at" is null limit 1), File: D:xampphtdocslaravelvendorlaravelframeworksrcIlluminateDatabaseConnection.php, Line: 669",

Exception Code: "SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "id" is ambiguous LINE 1: ...s"."id" = "accounts_profiles_biz"."user_id" where "id" = $1 ... ^ (SQL: select * from "users" inner join "accounts_profiles_biz" on "users"."id" = "accounts_profiles_biz"."user_id" where "id" = 1 and "users"."deleted_at" is null limit 1)"
}
]
  

Большое вам спасибо.

Комментарии:

1. Что вы получите, если попробуете так static::addGlobalScope('users', function (Builder $builder) use ($userId) { return $builder->with("accounts_profile_biz"); });

2. Код исключения: «Вызов неопределенного отношения [accounts_profile_biz] для модели [Приложение Пользователь]». Эта ошибка возникает.@ EncangCutbray

3. Вы создали модель для таблицы accounts_profiles_biz

4. Пожалуйста, поделитесь своей пользовательской моделью

5. имя модели для пользователя — «User», а для accounts_profile_biz — «AccountsProfileBiz»

Ответ №1:

 select * from "users" inner join "accounts_profiles_biz" on "users"."id" = "accounts_profiles_biz"."user_id" where "id" = 1 and "users"."deleted_at" is null limit 1
  

[где «id»= 1] , этот идентификатор неоднозначен, проверьте свой $builder .

Рекомендуется использовать красноречивую область ORM

Комментарии:

1. вернуть $builder->where(‘users.id ‘, $userId); но когда я это делаю, это дает мне правильные данные. но это создает проблему при объединении.