繁体   English   中英

Laravel属于许多其他方法

[英]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函数:

Laravel访问器和变量

基本上,您可以在模型中定义访问器函数:

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

就像我在评论中说的,您应该签出:

将值附加到JSON

欲获得更多信息。

对于API ,无论您使用的是Vue还是React或其他任何东西,当传递JSON数据供前端代码使用时,您基本上都是在创建api 仅供参考:

雄辩的: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM