Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉维尔雄辩关系链_Php_Mysql_Laravel_Eloquent_Laravel 5.4 - Fatal编程技术网

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