Search 不使用GridView的Yii2搜索模型
在房地产代理的主页上有一个serch表格。有关对象的数据存储在使用关系的表realty中。例如,有相关表格分类住宅、商业、地块、交易买卖、租赁、对象类型公寓、房屋、办公室 然后,不同的类别具有不同的属性,并且在搜索表单中有三个引导选项卡:住宅、商业、地块。每个选项卡下都有特定于choosen选项卡的选择和输入字段 在大多数情况下,使用搜索模型的示例都在gridview中给出。Search 不使用GridView的Yii2搜索模型,search,gridview,yii2,Search,Gridview,Yii2,在房地产代理的主页上有一个serch表格。有关对象的数据存储在使用关系的表realty中。例如,有相关表格分类住宅、商业、地块、交易买卖、租赁、对象类型公寓、房屋、办公室 然后,不同的类别具有不同的属性,并且在搜索表单中有三个引导选项卡:住宅、商业、地块。每个选项卡下都有特定于choosen选项卡的选择和输入字段 在大多数情况下,使用搜索模型的示例都在gridview中给出。 是否可以调整搜索模型逻辑,以便根据主页上搜索表单中指示的值从表“realty”返回结果数组?是的,当然可以。您有几个选择
是否可以调整搜索模型逻辑,以便根据主页上搜索表单中指示的值从表“realty”返回结果数组?是的,当然可以。您有几个选择: 解决方案1-最差的解决方案,但答案是您的问题 修改模型的搜索功能或创建新功能。搜索函数通常如下所示
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => Yii::$app->session->get(get_parent_class($this) . 'Pagination'),
],
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $dataProvider;
}
你可以把它改成
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
if (!($this->load($params) && $this->validate())) {
THROW AN ERROR SOMEHOW HERE
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $query->all();
}
但是,这将返回所有记录,因为ActiveDataProvider负责基于给定查询的分页
解决方案2,更好的解决方案
阅读这里的第一个例子。您可以在ActiveDataProvider上调用->getModels以获取实际记录。无需对搜索功能进行任何更改。对数组执行任何操作
解决方案3和我一直在使用的内容
将ActiveDataProvider与ListView一起使用。列表视图允许您创建记录列表,但不必是表。我个人在很多地方都这样做,效果很好。有时我将数组转换为ArrayDataProvider只是为了使用它。关于数据提供者的更多信息,请点击此处:是的,当然可以。您有几个选择: 解决方案1-最差的解决方案,但答案是您的问题 修改模型的搜索功能或创建新功能。搜索函数通常如下所示
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => Yii::$app->session->get(get_parent_class($this) . 'Pagination'),
],
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $dataProvider;
}
你可以把它改成
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
if (!($this->load($params) && $this->validate())) {
THROW AN ERROR SOMEHOW HERE
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $query->all();
}
但是,这将返回所有记录,因为ActiveDataProvider负责基于给定查询的分页
解决方案2,更好的解决方案
阅读这里的第一个例子。您可以在ActiveDataProvider上调用->getModels以获取实际记录。无需对搜索功能进行任何更改。对数组执行任何操作
解决方案3和我一直在使用的内容
将ActiveDataProvider与ListView一起使用。列表视图允许您创建记录列表,但不必是表。我个人在很多地方都这样做,效果很好。有时我将数组转换为ArrayDataProvider只是为了使用它。有关数据提供商的更多信息,请参见: