方法App \ Follower :: __ toString()不得引发异常:错误

时间:2018-12-11 17:31:01

标签: php laravel eloquent

我正在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]:检测到递归

有人可以解释此错误是什么以及如何消除此错误吗? 谢谢你。

1 个答案:

答案 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;