Yii2-activedataprovider не получает данные

Я использую некоторые $query->andFilterWhere(...) создать мой запрос.

и можете увидеть окончательный запрос по echo $query->createCommand()->rawSql;

когда я копирую последний запрос и передаю его в phpmyadmin, извлекается 2 записи, но в ActiveDataProvider ничего не найдено.

Где смысл, что я скучаю по этому ?!

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

Это мой код:

    $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,
]);

1

Решение

Проблема была в этом цикле:

foreach( $branches as &$v){
$v = $v->brch_id;
}

Я просто заменяю это:

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

и СДЕЛАНО, РЕШЕНО !!!!! : |

1

Другие решения

В вашем коде у вас есть

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

И только после этого у вас есть проверка для $post['State'] и вы используете его для joinWith, Я не знаю, какой тип поиска вы используете (или какую форму вы создали), но, похоже, вы ищете 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;

}

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector