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

Why is the hidden field in the Laravel Model not working when set dynamically?

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

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

所以,查询是这样的:

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']; 还是 setHidden,模型的转储都是相同的。

["hidden":protected]=>array(1){[0]=>string(5) "level"}

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

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

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