@esKei
Frontend разработчик

Yii2 не видит методы модели через $this, почему?

День добрый. Пишу модель, использую DAO. У меня в модели много методов и почему то внутри модели я не могу получить доступ к методам через $this.
class User extends Model {
    public function getById($user_id) {
        $user = Yii::$app->db->createCommand('SELECT * FROM {{%user}} WHERE id=:id')
            ->bindParam(':id', $user_id)
            ->queryOne();

        $group = $this->getUserGroup($user['id']);

        $user['group'] = $group;

        return $user;
    }
    public function getUserGroup($user_id) {
        $rows = (new \yii\db\Query())
            ->select('{{%group}}.id, {{%group}}.code, {{%group}}.name, {{%group}}.comment, {{%group}}.create_at, {{%group}}.update_at')
            ->from('{{%user_group}}')
            ->where(['user_id' => $user_id])
            ->join('INNER JOIN', '{{%group}}', '{{%group}}.id = {{%user_group}}.group_id')
            ->all();

        return $rows;
    }
}

Все работает если меняю $this-> на User::. Но это ведь не логично? И еще $db = Yii::$app->db; в каждом методе создавать надо?? Потому что попробовал написать
public $db;
public function __construct() {
    parent::__construct();        
    $this->db = Yii::$app->db;        
}

Он даже конструктор не видит.
Вызываю метод "getById(1)" из модели формы, по этому ругается на него же. Почему в модели формы он ищет метод другой модели, хотя наследования не идет:
Unknown Method – yii\base\UnknownMethodException
Calling unknown method: app\models\form\Reg::addUserGroup()

Вызов в модели формы:
use yii\base\Model;
class Reg extends Model {
    public function reg() {
        return User::getById(1);
    }
}
  • Вопрос задан
  • 907 просмотров
Пригласить эксперта
Ответы на вопрос 1
@matperez
Если я правильно понял, вы пытаетесь использовать $this в статическом вызове User::getById. В этом случае $this некуда указывать, так как инстанса класса не существует. Используйте ключевые слова static или self.
И еще, если getById будет вызываться именно статически, то добавьте ключевое слово static к определению функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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