基于多态关系的Laravel模型附加属性
我有一个模型基于多态关系的Laravel模型附加属性,laravel,polymorphism,Laravel,Polymorphism,我有一个模型课程,如下所示: class Course extends Model { protected $table = 'courses'; protected $primaryKey = 'id'; public $incrementing = true; public $timestamps = false; protected $appends = ['locked_by']; public function lock(){
课程
,如下所示:
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;
}
}
}
课程
可以有许多相关的锁定
对象,指示用户希望锁定课程
数据以供其他用户编辑
现在,从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\u by”
属性不是来自课程
表,而是由模型中的$appends
变量添加的。“locked by”
后面的数字是当前拥有该课程
锁的用户的用户ID
谁能告诉我
“lock”:[]
属性来自何处以及如何摆脱它?我注意到自己的“lock”:[]
属性不存在,如果getLockedByAttribute()
函数不访问$this->lock
,但是,我需要这个引用来获取拥有锁的用户的用户id
?我做错什么了吗?我是否应该使用不同的方法来获取拥有锁的用户的user\u id
?响应中包含lock
属性,因为为了获取locked\u by
属性的值,模型需要加载lock
关系
如果要在每次以数组或JSON形式返回课程
模型时隐藏锁定关系,可以将该关系添加到课程
模型的$hidden
属性中
从:
有时您可能希望限制属性,例如密码,
包含在模型的数组或JSON表示中的。做
因此,将$hidden属性添加到模型中
隐藏关系时,请使用关系的方法名称
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Course extends Model
{
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = ['lock'];
}
return App\Courses::with('lock')
->get()
->makeHidden('lock');