2017-08-11 105 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