我是php / laravel的新手。
我已经定义了一个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))
看起来我的ID未正确传递?我在这里做错了什么?
答案 0 :(得分: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);