无法将对象转换为字符串

时间:2014-06-13 14:23:05

标签: jquery session laravel

我的查询原因:Object of class Illuminate\Database\Eloquent\Builder could not be converted to string。当我在模型查询中使用硬编码名$uname替换'Dennis'时,错误消失。我检查了会话变量('username')是否为空并导致错误但是已设置。谢谢你的提示。

控制器:

$username = Session::get('username');
$data['users'] = Profile::GetUserData($username);
$users = Profile::GetUserData();

return View::make('profile_view', $data);

型号:

class Profile extends Eloquent{
    public function scopeGetUserData($uname){
        return DB::table('users')->where('user_name', '=', $uname)->first();
        //return DB::table('users')->where('user_name', '=', 'Dennis')->first();
    }
}

1 个答案:

答案 0 :(得分:2)

Controller以下代码导致问题,因为getUserData()需要一个参数,并且您正在调用该方法而没有任何这样的参数:

$users = Profile::GetUserData();

上面给出的代码是不必要的,因为您首先正确调用getUserData()方法,如下所示:

$data['users'] = Profile::GetUserData($username);

然后再次调用该方法不正确且此行没有用,因为您将$data数组传递给view,因此请删除以下行:

$users = Profile::GetUserData();

因此,您的Controller可能包含以下代码:

$username = Session::get('username');
$data['users'] = Profile::GetUserData($username)->first();
return View::make('profile_view', $data);

同样在你的scope method中你应该使用两个参数,因为第一个参数将由Laravel注入,这将是Illuminate\Database\Eloquent\Builder对象,你应该返回这个对象,而不是在里面执行查询方法(首先使用),因此您可以链接其他方法(如果需要):

class Profile extends Eloquent{
    public function scopeGetUserData($query, $uname){
        return $query->where('user_name', $uname);
    }
}

但你也可以这样称呼它:

public function scopeGetUserData($query, $uname){
    return $query->where('user_name', $uname)->first();
}

在这种情况下,你的控制器应该是这样的:

$username = Session::get('username');
$data['users'] = Profile::GetUserData($username);
return View::make('profile_view', $data);