@AlexSer

Почему в Yii2 не могу воспроизвести динамический запрос?

всем привет. Делаю по аналогии из документации
customer = Customer::findOne(123);

// SELECT * FROM `order` WHERE `customer_id` = 123 AND `subtotal` > 200 ORDER BY `id`
$orders = $customer->getOrders()
->where(['>', 'subtotal', 200])
->orderBy('id')
->all();

Моя модель
<?php

namespace frontend\models;

use Yii;


class Case extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'case';
    }
    public function rules()
    {
        return [
            [['date'], 'safe'],
            [['userID', 'historyID'], 'integer'],
            [['historyID'], 'exist', 'skipOnError' => true, 'targetClass' => History::className(), 'targetAttribute' => ['historyID' => 'id']],
        ];
    }
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'date' => 'Date',
            'userID' => 'User ID',
            'historyID' => 'History ID',
        ];
    }
    public  function getUsers(){
        return $this->hasMany(Users::className(), ['id' => 'user_id'])
            ->viaTable('history', ['id' => 'historyID']);
    }
}


Но когда я делаю $case=Case::find(); и обращаюсь $query=$case->getUsers()->where(['like','dr','1990'])->all();
он просто не видит свойство getUsers().
Вопрос что я не понимаю и как правильно надо?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
$case=Case::find()
Данная функция вам возвратит объект ActiveQuery, а не ActiveRecord, чтобы выполнить getUsers(), надо вызвать эту функцию о объекта Case, по примеру:
$case=Case::finOne($id);
$result=$case->getUsers()->where(['like','dr','1990'])->all();

либо так
$result=Case::find()->with(['users'])->where(['like','dr','1990'])->all();

Тут надо учитывать алиасы таблиц, а также правильно указать фильтрацию по dr
Что вам изначально необходимо получить в запросе? Все case вместе с users?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vksee
Прежде всего стоит для начала обратить внимание на то, что везде фигурирует имя атрибута userID, а в getUsers() почему-то user_id:
public function getUsers() {
return $this->hasMany(Users::className(), ['id' => 'user_id'])
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы