我的查询原因: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();
}
}
答案 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);