访问数据库条目时出现eloquvent错误

时间:2017-08-11 00:24:53

标签: php laravel eloquent

我是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未正确传递?我在这里做错了什么?

1 个答案:

答案 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);
相关问题