访问关系关系
我在公告功能中添加了我的应用程序。访问关系关系
我有一个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循环中时,我会出错吗?
你永远不会真的在你的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
在你的类用户,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);
}
并获得通过主动公告帮助
我刚刚刚回到' - > get()'解决方案。不过,我更喜欢自动属性版本。稍后会检查'@ each'功能,一眼看起来很有用!谢谢乔尔! – James
干杯,我很高兴它的帮助。 :) –