Yii2- как искать значение с помощью поисковой модели

Я работаю над yii2. У меня название модели RouteMeters. Здесь у меня meter_id, в котором сохранены все идентификаторы счетчика. В моем обзоре индекса я показываю значение meter_id, как показано ниже.

[
            'attribute' => 'mter_id',
            'label' => 'Meters',
            'value' => function ($data) {
                if (is_object($data->mter))
                    return $data->mter->meter_msn;
                return ' - ';
            },

        ],

Вид ниже

enter image description here

Но когда я ищу счетчики по номеру счетчика, запись не обнаруживается.

Ниже представлена ​​моя поисковая модель для RouteMeters.

 public function search($params)
{
    $query = RouteMeters::find();

    // add conditions that should always apply here

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'route_id' => $this->route_id,
        'mter_id' => $this->mter_id,
        'user_id' => $this->user_id,
    ]);
    if (!Yii::$app->user->isGuest && in_array(Yii::$app->user->identity->user_role, [3,4])) {
        $query->joinWith('teamsuser', true);
        $query->andFilterWhere(['=', 'user.group_id', Yii::$app->user->identity->group_id]);
    }

    $query->orderBy(['id' => SORT_DESC]);
    return $dataProvider;
}

Теперь в моей модели поиска я хочу разместить запрос, который даст мне запись выбранного номера счетчика при поиске в моем представлении индекса.

Серийные номера измерителя находятся в моей таблице meters с именем поля meter_msn, и я хочу соединиться с ним.

Я не знаю, что мне делать с моей поисковой моделью.

Любая помощь будет высоко оценен.

0
0
519
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
public function search($params)
{
    $query = RouteMeters::find()->joinWith('mter');

    // add conditions that should always apply here

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'route_id' => $this->route_id,
        //'mter_id' => $this->mter_id,
        'user_id' => $this->user_id,
    ]);
    if (!Yii::$app->user->isGuest && in_array(Yii::$app->user->identity->user_role, [3,4])) {
        $query->joinWith('teamsuser', true);
        $query->andFilterWhere(['=', 'user.group_id', Yii::$app->user->identity->group_id]);
    }

    $query->andFilterWhere(['like', 'meterTableName.meter_msn',  $this->mter_id]);
    $query->orderBy(['id' => SORT_DESC]);
    return $dataProvider;
}

Руководство

это дает мне ошибку SQLSTATE[42S22]: Column not found: 1054 Unknown column 'meters.meter_msn' in 'where clause' The SQL being executed was: SELECT COUNT(*) FROM route_meters` WHERE (mter_id = '002998004581') AND (meters.meter_msn LIKE '% 002998004581%') `

Moeez 11.04.2018 13:56
mter_id будет содержать id метра. Я хочу сравнить mter_id с id и отфильтровать результат по meter_msn. id - это идентификатор счетчика в таблице meters.
Moeez 11.04.2018 14:01

Другие вопросы по теме