我正在laravel中创建关注者用户控制器。
我的控制器具有以下功能:
public function follow($id)
{
if (Auth::user()) {
$follower = Auth::user()->user_id;
$user_to_follow = User::Find($id);
if ($user_to_follow) {
$follower = new Follower;
$follower->follower_id = $follower;
$follower->user_id = $user_to_follow;
if ($follower->save()) { <-- receiving error here
return "done";
} else {
return redirect('/')->back();
}
}
return $follower;
}
}
关注型号:
protected $table = "followers";
protected $fillable = ['follower_id', 'user_id', 'accepted'];
public function user()
{
return $this->belongsTo('App\User', 'user_id');
}
用户模型
public function followers()
{
return $this->hasMany('App\Follower', 'user_id');
}
在视图中
<a href="/follow/2">Follow</a>
点击“跟随我会收到错误”,
方法App \ Follower :: __ toString()不得引发异常,已捕获 Illuminate \ Database \ Eloquent \ JsonEncodingException:编码错误 ID为[]的JSON模型[App \ Follower]:检测到递归
有人可以解释此错误是什么以及如何消除此错误吗? 谢谢你。
答案 0 :(得分:1)
问题很明显,您将相同的变量用于2种不同的事物。首先,您要做的是:
$follower = Auth::user()->user_id;
但是后来你做
$follower = new Follower;
现在使用时:
$follower->follower_id = $follower;
然后尝试将相同的对象分配给对象属性,并可能在保存时导致问题。
您应该做的是改变:
$follower = Auth::user()->user_id;
进入
$followerId = Auth::user()->user_id;
然后
$follower->follower_id = $follower;
进入
$follower->follower_id = $followerId;