我正在构建一个简单的通知系统。
我可以通过Auth::user()->notifications
获取登录用户通知,但我的最终目标是获取通知来自的用户信息。
我希望得到
的最终结果foreach( Auth::user()->notifications AS $n)
{
echo $n->from->username;
}
目前这会抛出“试图获取非对象属性”错误。
通知表;
id
user_id - notification for this user
from_user_id - notification from this user
user.php的;
public function notifications()
{
return $this->hasMany('App\Notification', 'user_id', 'id')->orderBy('notifications.id','desc');
}
public function notificationsUnread()
{
return $this->hasMany('App\Notification', 'user_id', 'id')->where('notifications.seen',null)->orderBy('notifications.id','desc');
}
Notification.php;
public function to()
{
return $this->belongsTo('App\User', 'user_id');
}
public function from()
{
return $this->belongsTo('App\User', 'from_user_id');
}
答案 0 :(得分:0)
首先,您需要在表通知中设置外键;然后用户可以有一个通知。和许多在同一时间。一份通知。属于一个用户和许多通知。可以属于一个用户。所以在Notification模型中你设置了关系belongsTo就像这样;
外键:
$table->foreign('from')->refrences('id')->on('users')->onDelete('cascade');
那么关系:
public function users()
{
return $this->belongsTo('App\User');
}
然后从控制器中你可以得到这样的用户信息;
$userName= Notification::users()->name;
在你的情况下,你指的是错误的返回你将只得到关系类型而不是数据对象,因为你像非方法一样调用from
。你应该这样做:
foreach( Auth::user()->notifications AS $n)
{
echo $n->from()->username;
}