2016-10-10 135 views
0

我在公告功能中添加了我的應用程序。訪問關係關係

我有一個announcements表,其存儲通知和存儲該undismissed公告爲每個用戶announcement_active表。

當創建通告時,在announcements表中生成一條記錄,以便爲該通告的每個用戶存儲此記錄以及爲announcement_active表輸入一條記錄。

我的用戶模型保存了活躍公告的關係:

public function activeAnnouncements() 
    { 
     return $this->hasMany('App\ActiveAnnouncements'); 
    } 

我然後在我看來訪問該檢查任何undismissed公告如下:

@if (Auth::user()->activeAnnouncements()->count() > 0) 
    //code 
@endif 

上面的工作正常,這是當我試圖做一個for each循環在我有麻煩的公告:

@if (Auth::user()->activeAnnouncements()->count() > 0) 
    @foreach(Auth::user()->activeAnnouncements()->announcement as $announcement) 
     //code to display announcement 
    @endforeach 
@endif 

是我在鏈接->announcement,我跑了麻煩。我已經定義,像這樣的關係:

public function announcement() 
    { 
     return $this->belongsTo('\App\Announcements'); 
    } 

但是我得到的錯誤:

Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$announcement

當使用廷克和運行\App\User::find(1)->activeAnnouncements()->first()->announcement正確的公告顯示。

當我試圖將這些加載到我的foreach循環中時,我會出錯嗎?

回答

1

你永遠不會真的在你的foreach中檢索數據。相反,Laravel認爲你說「構建這個查詢,不執行它,然後尋找一個名爲'公告'的屬性」。如果你只是將其更改爲get()調用,它應該工作:

@foreach(Auth::user()->activeAnnouncements()->get() as $announcement) 

或者更好的是,使用自動屬性的版本:

@foreach(Auth::user()->activeAnnouncements as $announcement) 

順便說一句,它看起來像你可能要檢查裁刀的@each功能:https://laravel.com/docs/5.3/blade#rendering-views-for-collections

+0

我剛剛剛回到' - > get()'解決方案。不過,我更喜歡自動屬性版本。稍後會檢查'@ each'功能,一眼看起來很有用!謝謝喬爾! – James

+0

乾杯,我很高興它的幫助。 :) –

0

在你的類用戶,definine一個announcements關係是這樣的:

public function announcements() { 
    return $this->hasManyThrough(Announcement::class,ActiveAnnouncement::class); 
} 

可以再用announcement訪問用戶宣佈:

@if (Auth::user()->announcements()->count() > 0) 
    @foreach(Auth::user()->announcements as $announcement) 
     //code to display announcement 
    @endforeach 
@endif 

諾塔: 也許你可以簡單地在公告中添加一列is_active落ActiveAnnouncement模型。這樣,在你的類User定義announcements關係:

在你的類用戶,definine一個announcements關係是這樣的:

$activeAnnouncements = $user->announcements()->whereIsActive(true)->get() 

希望這將:

public function announcements() { 
    return $this->hasMany(Announcement::class); 
} 

並獲得通過主動公告幫助