iam*_*her 4 php phpunit laravel eloquent laravel-5
我有以下代码
$user = User::findByAccountCode($transaction->account_code);
Run Code Online (Sandbox Code Playgroud)
当我在 phpunit 上执行这段代码时,它返回一个 Illuminate\Database\Eloquent\Builder 的实例而不是用户模型。
这是 findByAccountCode 的代码
public function scopeFindByAccountCode($query,$account_code){
return $query->where('account_code', $account_code)->first();
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序出现以下错误
ErrorException: 传递给 aunicaj\Libraries\MarkupRepository::user() 的参数 1 必须是 aunicaj\Models\User 的实例,给定的 Illuminate\Database\Eloquent\Builder 实例
当我使用浏览器时,它工作正常,但在 phpunit 上却没有。谢谢
您错误地使用了查询范围。他们永远不应该获取任何记录(这就是您对first() 的调用正在执行的操作)——他们只能通过添加/删除约束来更新查询。
代替
public function scopeFindByAccountCode($query,$account_code){
return $query->where('account_code', $account_code)->first();
}
Run Code Online (Sandbox Code Playgroud)
和
public function scopeFindByAccountCode($query,$account_code){
return $query->where('account_code', $account_code);
}
Run Code Online (Sandbox Code Playgroud)
并在任何地方使用它,如下所示:
$user = User::findByAccountCode($transaction->account_code)->first();
Run Code Online (Sandbox Code Playgroud)
如果你想在你的User方法中有一个方法来返回给定帐户代码的用户,请随意创建它,但不要以scope开头,例如:
public static function findByAccountCode($account_code){
return static::where('account_code', $account_code)->first();
}
Run Code Online (Sandbox Code Playgroud)
这样,您的代码将按您的意愿工作 - 调用以下命令以获取单个用户:
$user = User::findByAccountCode($transaction->account_code);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4084 次 |
| 最近记录: |