Kewa2008
@Kewa2008
Программист

Yii2. Как подключить модель?

Добрый день.
Есть модель /frontend/models/Post.php

В нем метод
public function getDataPosts(){
        $language = Yii::$app->language;
        $data_lang = $this->getLangPosts()->where(['lang'=>$language])->one();
        return $data_lang;
    }


В нем обращаюсь к методу getLangPosts(), который в другой моделе (/frontend/models/LangPost.php)
Там есть метод
public function getLangPosts()
    {
        return $this->find();
    }


В моделе /frontend/models/Post.php подключаю LangPost.php
use app\models\LangPost;

При открытии страницы сайта ошибка Calling unknown method: app\models\Post::getLangPosts()

Что я делаю не так? =)
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Что я делаю не так? =)

Все... Вам не мешало бы разобраться с ООП хотя бы на уровне PHP
public function getLangPosts()
{
    return $this->find();
}

тут Вы вызываете статический метод find, как обычный это не правильно. Да и вообще не понятно зачем этот метод существует
public function getDataPosts(){
    $language = Yii::$app->language;
    $data_lang = $this->getLangPosts()->where(['lang'=>$language])->one();
    return $data_lang;
}

а тут Вы обращаетесь к методу getLangPosts() модели LangPost, при чем делаете это из модели Post через псевдо-переменную $this. $this хранить текущий объект, а в Вашем случае это объект класса Post который не имеет метода getLangPosts().

Сделайте getLangPosts статическим методом и работайте с ним как с статическим методом, например:
app\models\LangPost
public static function getLangPosts()
{
    return static::find();
}

app\models\Post
public function getDataPosts(){
    $language = Yii::$app->language;
    $data_lang = LangPosts::getLangPosts()->where(['lang'=>$language])->one();
    return $data_lang;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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