如何正确隐藏模型关系以返回toArray()或toJson()?

时间:2013-12-19 00:13:59

标签: php laravel

我目前正在开发一个我正在编写API的项目,并且有很多模型,我试图隐藏他们的父关系,就像这样

<?php namespace Viper\Model;

class User_Token extends Eloquent {

    protected $table = 'users_tokens';

    protected $fillable = array(
        'user_id', 'token'
    );

    protected $hidden = array(
        'id', 'user_id', 'user'
    );

    public function user() {
        return $this->belongsTo('User');
    }

}

在Laravel文档中,对于Eloquent > Converting to Array or Json部分,它清楚地说明了

  

注意:隐藏关系时,请使用关系的方法名称,   不是动态访问者名称。

这究竟是什么意思?在上面的例子中,方法名称和动态访问者名称都是相同的,我不能为我的生活,想到这种情况不会是这种情况。

2 个答案:

答案 0 :(得分:6)

protected $hidden = array(
        'id', 'user_id', 'user'
                           ^^^ relationship's method name which is "user"
);

如果要隐藏关系,则必须在隐藏属性下包含method name。从隐藏的属性中,我可以看到,您完全隐藏了来自Array和JSON转换的user关系。但是,如果您的users_tokens表中有“用户”列,我不知道Laravel的行为。

public function user() {
    return $this->belongsTo('User');
}

答案 1 :(得分:1)

我遇到了同样的问题,并决定用PR向Laravel文档澄清这一点。 似乎没有区别,而且说明不正确。

https://github.com/laravel/docs/pull/3351