ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Kreng
Сообщения: 202
Зарегистрирован: 2017.02.16, 10:11

ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение Kreng »

ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а.
Если конкретнее, есть Модель1, есть Модель2, первая через has many получает записи второй. И есть Модель Поиска для страницы Модели1.
В итоге такой код.

Код: Выделить всё

    public function actionListNomenclature($id)
    {
        $provider = Providers::find()->select(['name','id'])->where(['id'=>$id])->one();
        $searchModel = new SearchNomenclaturesProvider();
        $dataProvider = $searchModel->search(Yii::$app->request->getQueryParams(),$provider);
        
         return $this->render('listNomenclature', [
             'dataProvider' => $dataProvider,
             'searchModel' => $searchModel,
             'provider' => $provider,
         ]);
    }

Код: Выделить всё

   
   class SearchNomenclaturesProvider
   
       public function search($params,$provider)
    {
        $query = $provider->nomenclatures;
    }
И ошибка
Setting unknown property: yii\data\ArrayDataProvider::query

Как
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение zelenin »

Kreng писал(а): 2017.08.18, 18:33 И ошибка
Setting unknown property: yii\data\ArrayDataProvider::query
где вы устанавливаете $query?
Kreng писал(а): 2017.08.18, 18:33Как
так
Kreng
Сообщения: 202
Зарегистрирован: 2017.02.16, 10:11

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение Kreng »

В смысле где? Первое - код экшена, второе сама поисковая модель, там и $query

Код создания провайдера ниже. Он ведь по-умолчанию прописан и в офиц доке.

Код: Выделить всё

 $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
Последний раз редактировалось Kreng 2017.08.22, 14:59, всего редактировалось 1 раз.
Kreng
Сообщения: 202
Зарегистрирован: 2017.02.16, 10:11

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение Kreng »

Вот так надо было. Создал has many у номенклатуры для поставщиков и в итоге через неё подбираются номенклатуры в таком запросе.

Код: Выделить всё


$query = Nomenclature::find()->joinWith('providers')->where(['nomenclature_and_provider.provider_id'=>$provider->id]);


if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
}
 $query->andFilterWhere(['like', 'nomenclature.name', $this->name]); 

Последний раз редактировалось Kreng 2017.08.22, 14:59, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение zelenin »

Kreng писал(а): 2017.08.18, 19:33 В смысле где? Первое - код экшена, второе сама поисковая модель, там и $query
но кода вы не привели, где $query
Kreng писал(а): 2017.08.18, 19:33Код создания провайдера ниже. Он ведь по-умолчанию прописан и в офиц доке.

Код: Выделить всё

 $dataProvider = new ArrayDataProvider([
            'query' => $query,
        ]);
с каких пор ARRAY Data Provider работает с Query, если он ARRAY? об этом и ошибка.
Kreng
Сообщения: 202
Зарегистрирован: 2017.02.16, 10:11

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение Kreng »

ActiveDataProvider там надо, да. Это я просто эксперементировал.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ActiveRecord объекты(полученные через hasMany) для $query в searchModel GridView-а

Сообщение zelenin »

Kreng писал(а): 2017.08.22, 14:58 ActiveDataProvider там надо, да. Это я просто эксперементировал.
на форуме приводите тот код, на который хотите получить помощь, а не одну из итераций ваших экспериментов
Ответить