我在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/eloquent
发布于 2022-05-15 11:46:23
在查询生成器上调用->get()将为您提供一个包含多个用户的集合实例。而且集合实例上肯定没有wg_name,所以结果总是错误的。
尝试使用first()
$wgName = Auth::user()
->join('wg_groups', 'users.wg_group_id', '=', 'wg_groups.id')
->first();发布于 2022-05-15 11:45:29
当前,您正在从数据库中选择所有用户。这是因为出色地将不存在的方法重定向到新的查询生成器实例。
通过将查询更改为使用first()方法而不是get()方法,您将只收到一条记录,但这可能不是正确的记录,因为它没有考虑到当前用户。
解决这个问题有多种方法。
1:只需使用一个简单的查询来接收wg_name。
$wgName = DB::table('wg_groups')->find(Auth::user()->wg_group_id);2:在User模型中添加一个全局范围,以便在查找用户时始终加入wg_group数据。
您可以将以下方法添加到User模型中,以便在查询users表时始终加入此表。
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;https://stackoverflow.com/questions/72247819
复制相似问题