这是标准的Yii2
SearchModel
search
操作
public function search($params, $cond)
{
$query = Service::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
$query->where(['param' => $value]); //why this modified after it passed to provider?
return $dataProvider;
}
为什么在将$query
作为参数传递给ActiveDataProvider
之后修改了它,它为什么起作用?带有参数的数组如何保持对$query
的引用?
答案 0 :(得分:5)
ActiveQuery
是可变对象,在PHP中,对象始终通过引用传递。在您的情况下,对$query
的引用被分配给$dataProvider->query
,因此$query
和$dataProvider->query
指向同一个对象。对$query
的任何修改也将反映在$dataProvider->query
上。
您可以在PHP documentation中阅读有关此内容的更多信息。