我在 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/eloquent
uj5u.com熱心網友回復:
呼叫->get()Query builder 將為您提供一個包含多個用戶的 Collection 實體。Collection 實體上肯定沒有wg_name,所以結果總是錯誤的。
嘗試使用first():
$wgName = Auth::user()
->join('wg_groups', 'users.wg_group_id', '=', 'wg_groups.id')
->first();
uj5u.com熱心網友回復:
當前,您正在從資料庫中選擇所有用戶。這是因為 Eloquent 將不存在的方法重定向到新的查詢構建器實體。
通過將查詢更改為使用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://www.uj5u.com/ruanti/475283.html
