[英]Laravel belongs to many with additional methods
对于我使用belongsToMany()
同一用户模型上的关注者关系,
public function followers() {
return $this->belongsToMany('App\User', 'followers', 'follow_id', 'user_id');
}
但是因为我在使用vue加载时将其用于聊天列表,所以我在页面加载时传递了json_encode(auth()->user()->followers)
,这可以根据需要工作。
但是当我说的时候,只使用一些列:
->select(['id', 'name', 'avatar']);
我还有其他avatar
方法:
public function image() {
return $this->avatar || 'some-default-image';
}
我怎样才能同时通过很多人呢? 没有withDefault
方法。
您正在寻找的是Accessor
函数:
基本上,您可以在模型中定义访问器函数:
public function getAvatarAttribute($value)
{
return $value || 'some-default-image';
}
然后,当您使用->avatar
访问avatar
属性时,将调用accessor
函数,并将获得计算值。
================================================== ==================
评论有字数限制。
您有Followers表,其中每个关注者都是一个User
。 您可以使用Relationship过滤属于User
的所有关注者。 您希望在每个关注者上调用getInfo()
,以便将其他数据附加到您的JSON
结构中。
在这种情况下,您无需筛选每个关注者并自己调用getInfo()
。 您使用accessor
方法,将getInfo()
代码放入accessor
方法,并在User
模型中修改$appends
getInfo()
数组,然后将自动附加JSON
数据。
public function getUserInfoAttribute()
{
$userInfo = ... //use logic in your original getInfo method
return $userInfo;
}
然后,将user_info
添加到User
模型的$appends
user_info
数组中:
protected $appends = ['user_info'];
这样,当您的实例序列化为JSON
时,将自动包含您的user_info
。
就像我在评论中说的,您应该签出:
欲获得更多信息。
对于API
,无论您使用的是Vue
还是React
或其他任何东西,当传递JSON
数据供前端代码使用时,您基本上都是在创建api
。 仅供参考:
尝试将其添加到您的User
模型中
class User extends Model {
protected $appends = ['image'];
// other stuff..
}
这将强制注入您的计算属性,即。 每个User
模型实例中的图像,但要使其工作,您必须命名方法(或创建另一个方法),例如getImageAttribute()
,而不仅仅是image()
// getter for `image` property in user model object
public function getImageAttribute() {
return $this->avatar || 'some-default-image';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.