我的模型定义如下( ps :我在此模型类中使用的视图没有主键,是: vwAlarmActionSummaryYFUserSite )
class Alarm extends Model
{
protected $table = 'vwAlarmActionSummaryYFUserSite';
public $timestamps = false ;
public function scopeActiveAlarms($query)
{
return $query->whereDate('AlarmClearedUTCDateTime', '=', '9999-12-31 23:59:59.9999999');
}
public function alarmActionDescription()
{
$rec = \DB::table('vwAlarmActionSummary')
->where('AlarmId', '=', $this->AlarmId);
return $rec;
}
}
我在模型之上调用;
$alarm = Alarm::where('AlarmId', $id)->where('yfUserID', $yfUserID)->firstOrFail();
现在我在alarmActionDescription()
方法获得此异常;
(1/2) LogicException
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation
in HasAttributes.php (line 403)
at Model->getRelationshipFromMethod('AlarmActionDescription')
in HasAttributes.php (line 386)
at Model->getRelationValue('AlarmActionDescription')
in HasAttributes.php (line 316)
我想从vwAlarmActionSummary
表中返回一行,因为我正在传递AlarmId
,它从我的控制器传递为$id
。
这里有什么问题?如何修改我的alarmActionDescription()
方法以根据AlarmId
返回一行?
答案 0 :(得分:0)
您似乎错误地调用了方法alarmActionDescription()
。
像这样:
$alarm->alarmActionDescription;
调用它就像是一个属性。这样做,Laravel假设您正在尝试获取关系列表。例如,在您的闹钟中,您有:
public function users() {
return $this->belongsToMany(User::class);
}
如果你这样做:
$alarm->users;
您将收到与您的闹钟相关的一组用户。
请注意,您使用与我们之前声明的功能相同的名称来调用属性。
但如果你这样做:
$alarm->users();
它将执行该功能并返回一个关系,即belongsToMany()
。
但是,在您的情况下,功能alarmActionDescription()
,您没有返回关系,您将从返回行数据库中。
您可以做的是,调用方法如:
$alarm->alarmActionDescription();
与你所说的你所做的相反:
$alarm->alarmActionDescription;
注意差异。