У меня есть модель Course
следующим образом:
class Course extends Model {
protected $table = 'courses';
protected $primaryKey = 'id';
public $incrementing = true;
public $timestamps = false;
protected $appends = ['locked_by'];
public function lock(){
return $this->morphMany('App\Models\Lock', 'asset');
}
public function getLockedByAttribute(){
if($this->lock->count()){
return $this->lock->shift()->owner_id;
} else {
return 0;
}
}
}
A Course
может иметь много связанных Lock
объектов, указывающих, что пользователь хочет заблокировать данные Course
для редактирования другими пользователи.
Теперь при получении Course
подробностей определенного c курса из Laravel API я получаю следующие данные:
{
"id": 1,
"name": "Linear Algebra 2",
"abbreviation": "2WF20",
"status": "draft",
"owner_id": 2,
"created_at": "2020-03-10 13:09:15",
"locked_by": 2,
"lock": []
}
в то время как я ожидал:
{
"id": 1,
"name": "Linear Algebra 2",
"abbreviation": "2WF20",
"status": "draft",
"owner_id": 2,
"created_at": "2020-03-10 13:09:15",
"locked_by": 2
}
Как видно из кода, атрибут "locked_by"
не берется из таблицы Course
, а добавляется переменной $appends
в модели. Число после "locked_by"
- это идентификатор пользователя, который в данный момент владеет блокировкой на этом Course
.
Может кто-нибудь сказать мне, откуда берется атрибут "lock": []
и как от него избавиться? Я заметил, что атрибут "lock": []
отсутствует, если функция getLockedByAttribute()
не обращается к $this->lock
, однако мне нужна эта ссылка, чтобы получить user_id
пользователя, владеющего блокировкой? Я делаю что-то неправильно? Должен ли я использовать другой подход, чтобы получить user_id
пользователя, владеющего блокировкой?