Php 拉维尔雄辩关系链
我正在建立一个简单的通知系统。 我可以通过Php 拉维尔雄辩关系链,php,mysql,laravel,eloquent,laravel-5.4,Php,Mysql,Laravel,Eloquent,Laravel 5.4,我正在建立一个简单的通知系统。 我可以通过Auth::user()->通知获取登录用户的通知,但我的最终目标也是获取通知来自的用户信息 我希望最后的结果是 foreach( Auth::user()->notifications AS $n) { echo $n->from->username; } 当前,这会引发“尝试获取非对象的属性”错误 通知表 id user_id - notification for this user from_user_id - noti
Auth::user()->通知获取登录用户的通知
,但我的最终目标也是获取通知来自的用户信息
我希望最后的结果是
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');
}
首先,需要在表通知中设置外键;然后,用户可以拥有notif。同时也有很多。诺蒂夫。属于一个用户和许多notif。可以属于用户。因此,在通知模型上,您设置了如下关系: 外键:
$table->foreign('from')->refrences('id')->on('users')->onDelete('cascade');
然后关系:
public function users()
{
return $this->belongsTo('App\User');
}
然后从控制器上你可以得到用户信息,就像这样
$userName= Notification::users()->name;
在您的例子中,如果在return中指向错误,您将只获得关系类型而不是数据对象,因为您像非方法一样从调用。你应该这样做:
foreach( Auth::user()->notifications AS $n)
{
echo $n->from()->username;
}
不确定你真正的问题是什么,你能详细说明或说明什么不适合你吗?我无法附加通知来自的用户信息,即通知来自的用户的用户名。我更新了我的问题。尝试Notification->from代码>