我正在模型中编写一个函数,我需要这样的数据。
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
但是,我在两种情况下得到的结果不同。这是一个错误还是我做错了什么?
答案 0 :(得分:1)
您通过setHidden
在特定模型实例上设置隐藏。然后,您将查询数据库以获取新的集合或模型。在一个模型实例上设置这些内容不会影响其他模型实例。
模型的hidden
属性不是静态属性。每个Model实例都有自己的hidden
属性数组。