Функция AS не работает в LARAVEL операторе базы данных - PullRequest
0 голосов
/ 08 января 2020

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

Таблица пользователей:

  • id
  • имя
  • пол

Пол таблица:

  • id
  • имя

Итак, я создаю Функция соединения в контроллере выглядит так:

$account = DB::table('users')
                            ->join('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->get()->first();

И в моем блейде я использую это, чтобы получить имя поля в таблице пользователей:

{{ $account->users_name }}

Но я получил уведомление об ошибке, подобное этому:

Попытка получить свойство 'users_name' необъекта

Кто-нибудь может мне помочь, как мне это сделать? спасибо.

Ответы [ 4 ]

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

Вы получаете несколько записей, если используете метод get().

с использованием get ();

$accounts = DB::table('users')
           ->join('genders','genders.id', '=','users.gender')
           ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
           ->where('users.id',$id)->get();

Blade-файл

@foreach($accounts as $account)
    {{ $account->users_name }}
@endforeach

используя first (), вы получите только одну коллекцию.

$accounts = DB::table('users')
           ->join('genders','genders.id', '=','users.gender')
           ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
           ->where('users.id',$id)->first();

Blade-файл

{{ $account->users_name }}
0 голосов
/ 08 января 2020

Кажется, что такая запись не была найдена в базе данных - поэтому вы получаете эту ошибку, потому что $account является нулевым.

Убедитесь, что запрос генерирует действительный результат, и в представлении добавьте условие перед отображением учетной записи, например:

@if ($account)
   // here display account
@endif

или в вашем контроллере измените

->first()

на

->firstOrFail()

на тот случай, если вам не нужны дальнейшие действия, когда аккаунт не найден.

А на самом деле вместо:

->where('users.id',$id)->get()->first()

вы можете просто использовать:

->where('users.id',$id)->first();
0 голосов
/ 08 января 2020

Я думаю, что, возможно, у вашего пользователя нет записи по полу,

попробуйте использовать левое соединение:

$account = DB::table('users')
                            ->leftjoin('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->first();
0 голосов
/ 08 января 2020

Используйте имя вместо user_name

Попробуйте отладить код с помощью print_r () там будут два разных массива с одинаковыми полями, так что если вы Если вы хотите использовать имя пользователя, тогда ваш код должен выглядеть следующим образом:

{{ $account->name }}

. Если вы хотите использовать имя пола, тогда имя должно быть внутри массива пола, чтобы вы могли использовать имя пола, как показано ниже в блейд-файле

* 1011. *

Изменить вышеуказанный код

$account = DB::table('users')
                            ->join('genders','genders.id', '=','users.gender')
                            ->select('users.*','genders.*','users.id as users_id','users.name as users_name','genders.id as genders_id','genders.name as genders_name')
                            ->where('users.id',$id)->first();
...