【问题标题】:Object could not be converted to strings对象无法转换为字符串
【发布时间】:2014-06-14 05:42:27
【问题描述】:

我的查询原因:Object of class Illuminate\Database\Eloquent\Builder could not be converted to string。当我在模型查询中用硬编码名称 'Dennis' 替换 $uname 时,错误就会消失。我检查了会话变量('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();
    }
}

【问题讨论】:

  • 这段代码毫无意义。那不是引发该错误的代码。这不是您使用范围函数的方式。有两次对GetUserData 的调用,一次正确,一次缺少参数。这是怎么回事?
  • 来自文档:“范围允许您轻松地在模型中重用查询逻辑。” -> 你应该从作用域函数返回查询部分,而不是实际查询数据库。您发布的错误与此代码无关。抛出该错误时,您可能没有那个->first()。或者别的什么,没有人能说出来,你的代码中发生了各种各样的错误。尝试阅读文档:laravel.com/docs/eloquent#query-scopes

标签: jquery session laravel


【解决方案1】:

在您的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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多