2017-08-11 101 views
0

我完全陌生于php/laravel。访问数据库条目时出现eloquvent错误

我已经定义了一个Model,如下所示(我在DB中有一个表,AlarmActions)。在Doupdate方法中,我喜欢根据ID返回一个条目。

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 

class AlarmActions extends LobModel 
{ 
    protected $table = 'AlarmActions'; 
    protected $primaryKey = 'AlarmActionId'; 

    public function scopeDoUpdate($alarmId) 
    { 
     return $alarmAction = \DB::table('AlarmActions')->where('AlarmActionId', $alarmId)->first(); 
    } 

} 

我正在调用上面的类像;

$alarmAction = AlarmActions::doUpdate($id); 

但是我得到了;

Object of class Illuminate\Database\Eloquent\Builder could not be converted to string 
t HandleExceptions->handleError(4096, 'Object of class Illuminate\\Database\\Eloquent\\Builder could not be converted to string', '/app/vendor/laravel/framework/src/Illuminate/Support/Str.php', 331, array('search' => '?', 'replace' => object(Builder), 'subject' => 'select top 1 * from [AlarmActions] where [AlarmActionId] = ?', 'position' => 59)) 

看起来像我的身份证不能正确传递?我在这里做错了什么?

回答

0

其实在任何scope方法的第一个参数是Query Builder例如,通过Laravel过去了,之后你应该使用其他参数,

所以更换:

public function scopeDoUpdate($alarmId) 
{ 
    return $alarmAction = \DB::table('AlarmActions')->where('AlarmActionId', $alarmId)->first(); 
} 

由:

public function scopeDoUpdate($query, $alarmId) 
{ 
    return $query->where('AlarmActionId', $alarmId)->first(); 
} 

而且您仍可以通过以下方式拨打电话:

$alarmAction = AlarmActions::doUpdate($id); 
+0

感谢它的运作, – Ratha