为什么Laravel模型中的隐藏字段在动态设置时不起作用?

时间:2017-03-16 07:27:08

标签: laravel model eloquent laravel-5.4 laravel-eloquent

我正在模型中编写一个函数,我需要这样的数据。

public function showAdvancedRoutes(array $requestArray = [], $journey_id = null, $level_id = null) { $queryResults = $this -> with(['level' => function ($query) use($journey_id, $level_id) { $query -> where('levels.level_number', $level_id) -> where('levels.journey_id', $journey_id); }]) -> get() ; return (sizeof($queryResults) == 0) ? null : ((sizeof($queryResults) > 1) ? ["Multiple Records. Please contact developer."] : $queryResults[0]); }

所以,查询是这样的:

public function level() {
        return $this->belongsTo('App\Model\Level', 'level_id');
    }

其中

protected $hidden = ['level'];

现在真正的问题是:

当我写{"id": 1, "level_id": "1"}时,我public function showAdvancedRoutes(array $requestArray = [], $journey_id = null, $level_id = null) { $this -> setHidden(['level']); //#query logic } 得到了理想的结果。 但是,当我做这样的事情时:

{"id": 1, "level_id": "1", "level": {"id": 1}}

我明白了, protected $hidden = ['level'];

所以,我真正怀疑为什么在构建Query时隐藏属性不起作用?

在这两种情况下,无论是动态编写setHidden还是["hidden":protected]=>array(1){[0]=>string(5) "level"} ,模型的转储都是一样的。

body

但是,我在两种情况下得到的结果不同。这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

您通过setHidden在特定模型实例上设置隐藏。然后,您将查询数据库以获取新的集合或模型。在一个模型实例上设置这些内容不会影响其他模型实例。

模型的hidden属性不是静态属性。每个Model实例都有自己的hidden属性数组。