Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2 activedataprovider不';无法获取数据_Php_Mysql_Sql_Yii2_Cactivedataprovider - Fatal编程技术网

Php Yii2 activedataprovider不';无法获取数据

Php Yii2 activedataprovider不';无法获取数据,php,mysql,sql,yii2,cactivedataprovider,Php,Mysql,Sql,Yii2,Cactivedataprovider,我使用一些$query->andFilterWhere(…)来创建我的查询 并可以通过echo$query->createCommand()->rawSql查看最终查询 当我复制最终查询并在phpmyadmin上通过它时,在ActiveDataProvider中获取了2条记录,但没有找到结果 我错过的重点在哪里 ============================================ 这是我的代码: $query = Camera::find(); $post = Yii

我使用一些
$query->andFilterWhere(…)
来创建我的查询

并可以通过
echo$query->createCommand()->rawSql查看最终查询

当我复制最终查询并在phpmyadmin上通过它时,在ActiveDataProvider中获取了2条记录,但没有找到结果

我错过的重点在哪里

============================================

这是我的代码:

    $query = Camera::find();
$post = Yii::$app->request->post();
$post2 = array_filter((array)$post);

if( count($post2) >0 ){
    foreach($post2 as $k=>$v){
        $query->andFilterWhere([ 'Like' , $k , $v ]);
    } 
}

if($post['State'] > 0){
    $branches = Branch::find()->joinWith('city')->where('state_id='.((int)$post['State']))->all();
    foreach( $branches as &$v){
        $v = $v->brch_id;
    }
    $query->andFilterWhere([ 'IN' , 'brch_id' , $branches ]);    
}

echo $query->createCommand()->rawSql;

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);
在您的代码中

if( count($post2) >0 ){ // that means all fields filled
    foreach($post2 as $k=>$v){
        $query->andFilterWhere([ 'Like' , $k , $v ]);
    }
}
在这之后,您将检查
$post['State']
,并将其用于与
的连接。我不知道您正在使用哪种类型的搜索(或者您构建了什么形式),但似乎您正在这两种模型中搜索
状态
。。。这是正确的行为吗

如果这是正确的,您能否向我们展示为您工作的原始sql查询,而不是使用
ActiveDataProvider

我可以问一下,为什么不使用一个类来进行搜索,并从
Camera
扩展它

这将类似于:

public $state // fields that you Camera model don't have.

public function search($params){
    $query = Camera::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $query->andFilterWhere('like', 'attribute', $this->attribute);
    // same for the others attributes here...

    $query->joinWith(['nameOfRelationWithBranch' => function ($queryBranch) {
        $queryBranch->joinWith(['city' => function ($queryCity) {
            $queryCity->andFilterWhere('state_id', $this->state);
        }]);
    }]);

//echo $query->createCommand()->rawSql;
return $dataProvider;

}问题是这个循环:

foreach( $branches as &$v){
    $v = $v->brch_id;
}
我只是将其替换为:

$a = [];
foreach( $branches as $v){
    $a[] = (int)$v->brch_id;
}

完成了,解决了|

你能发布更多的代码吗?仅凭此信息很难回答。添加了代码。请帮助…请在最终查询中添加您得到的内容。因为这些细节不足以帮助你。还请提及Yii的post值::$app->request->post();创建这部分代码后,您会做什么。。显示其余..添加与phpmyadmin一起使用的行查询。