Я сделал в laravel v.8. запрос к базе данных (красноречивый), который возвращает несколько столбцов.
$wgName = Auth::user()
->join('wg_groups', 'users.wg_group_id', '=', 'wg_groups.id')
->get();
Теперь я хочу, чтобы в моем представлении html отображалось wg_name, если оно установлено. Я пробовал следующие четыре вещи:
@if (isset($wgName->wg_name))
<h1>{{$wgName->wg_name}}</h1>
@endif
Здесь просто ничего не отображается
@if (isset($wgName))
<h1>{{$wgName->wg_name}}</h1>
@endif
Исключение: свойство [wg_name] не существует в этом экземпляре коллекции.
@isset($wgName)
<h1>{{$wgName->wg_name}}</h1>
@endisset
Исключение: свойство [wg_name] не существует в этом экземпляре коллекции.
@isset($wgName->wg_name)
<h1>{{ $wgName->wg_name }}</h1>
@endisset
Здесь просто ничего не отображается
Я понятия не имею, почему это не работает, и я ничего не нашел в документации. https://laravel.com/docs/8.x/красноречивый
@gre_gor фф, спасибо! я заменил «get ()» на «firstOrFail», теперь он работает так, как я хочу!






В настоящее время вы выбираете всех пользователей из базы данных. Это происходит из-за того, что Eloquent перенаправляет несуществующие методы на новый экземпляр построителя запросов.
Изменив запрос, чтобы использовать метод first() вместо метода get(), вы получите только одну запись, но, вероятно, это будет неправильная запись, поскольку она не учитывает текущего пользователя.
Есть несколько способов решить эту проблему
1: Просто используйте простой запрос, чтобы получить wg_name.
$wgName = DB::table('wg_groups')->find(Auth::user()->wg_group_id);
2: Добавьте глобальную область видимости к вашей модели User, чтобы всегда объединять данные wg_group при поиске пользователя.
Вы можете добавить следующий метод в свою модель User, чтобы всегда присоединяться к этой таблице при запросе таблицы пользователей.
protected static function booted()
{
self::addGlobalScope('include_wg_group', function (\Illuminate\Database\Eloquent\Builder $query) {
$query->join('wg_groups', 'users.wg_group_id', '=', 'wg_groups.id');
});
}
Теперь каждый раз, когда вы получаете экземпляр User, к нему будет присоединена вся информация wg_groups. Это позволяет вам просто получить имя следующим образом:
$wgName = Auth::user()->wg_name;
Вызов ->get() в построителе запросов даст вам экземпляр коллекции, содержащий нескольких пользователей. И в экземпляре Collection определенно нет wg_name, поэтому результат всегда ложный.
Попробуйте использовать first():
$wgName = Auth::user()
->join('wg_groups', 'users.wg_group_id', '=', 'wg_groups.id')
->first();
Предупреждение, это всегда будет выбирать первую запись пользователя, поэтому это даст неверный результат, если в вашей системе несколько пользователей.
@RojVroemen, конечно, но я не хотел менять запрос. просто исправить причину ошибки.
Это запрос, который выходит при таком запросе: select * from users inner join wg_groups on users.wg_group_id = wg_groups.id limit 1
->get()возвращает коллекцию, а не модель.