2016-10-10 98 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); 
} 

并获得通过主动公告帮助