为什么 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
属性 数组。
我正在模型中编写一个函数,我需要这样的数据。
{"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
属性 数组。