почему рейтинг нулл? как правильно вывести данные с таблицы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

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

public function actionWall($login){
        $user = Yii::$app->user;
        $user = User::find()->where(['username' => $login])->one();
        if ($user) {
            return $user;
        }
        throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

    }
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

можно пример
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

public function actionWall($login){
$user = Yii::$app->user;
$user = User::find()->where(['username' => $login])->with('rating')->one();
if ($user) {
return $user;
}
throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

}
так пишет ошибку
with('rating') как правильно
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

public function actionWall($login){
$user = Yii::$app->user;
$user = User::find()->where(['username' => $login])->with(['user', 'person'])->one();
if ($user) {
return $user;
}
throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

}
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

{
"name": "Exception",
"message": "common\\models\\user\\User has no relation named \"rating\".",
"code": 0,
"type": "yii\\base\\InvalidArgumentException",
"file": "/web/yii2/vendor/yiisoft/yii2/db/BaseActiveRecord.php",
"line": 1247,
"stack-trace": [
"#0 /web/yii2/vendor/yiisoft/yii2/db/ActiveQueryTrait.php(177): yii\\db\\BaseActiveRecord->getRelation('rating')",
"#1 /web/yii2/vendor/yiisoft/yii2/db/ActiveQueryTrait.php(144): yii\\db\\ActiveQuery->normalizeRelations(Object(common\\models\\user\\User), Array)",
"#2 /web/yii2/vendor/yiisoft/yii2/db/ActiveQuery.php(224): yii\\db\\ActiveQuery->findWith(Array, Array)",
"#3 /web/yii2/vendor/yiisoft/yii2/db/ActiveQuery.php(306): yii\\db\\ActiveQuery->populate(Array)",
"#4 /web/yii2/api/modules/v1/controllers/UserController.php(22): yii\\db\\ActiveQuery->one()",
"#5 [internal function]: api\\modules\\v1\\controllers\\UserController->actionWall('prog1')",
"#6 /web/yii2/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)",
"#7 /web/yii2/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)",
"#8 /web/yii2/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('wall', Array)",
"#9 /web/yii2/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('v1/user/wall', Array)",
"#10 /web/yii2/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
"#11 /web/yii2/api/web/index.php(17): yii\\base\\Application->run()",
"#12 {main}"
],
"previous": {
"name": "Exception",
"message": "Calling unknown method: common\\models\\user\\User::getrating()",
"code": 0,
"type": "yii\\base\\UnknownMethodException",
"file": "/web/yii2/vendor/yiisoft/yii2/base/Component.php",
"line": 300,
"stack-trace": [
"#0 /web/yii2/vendor/yiisoft/yii2/db/BaseActiveRecord.php(1244): yii\\base\\Component->__call('getrating', Array)",
"#1 /web/yii2/vendor/yiisoft/yii2/db/ActiveQueryTrait.php(177): yii\\db\\BaseActiveRecord->getRelation('rating')",
"#2 /web/yii2/vendor/yiisoft/yii2/db/ActiveQueryTrait.php(144): yii\\db\\ActiveQuery->normalizeRelations(Object(common\\models\\user\\User), Array)",
"#3 /web/yii2/vendor/yiisoft/yii2/db/ActiveQuery.php(224): yii\\db\\ActiveQuery->findWith(Array, Array)",
"#4 /web/yii2/vendor/yiisoft/yii2/db/ActiveQuery.php(306): yii\\db\\ActiveQuery->populate(Array)",
"#5 /web/yii2/api/modules/v1/controllers/UserController.php(22): yii\\db\\ActiveQuery->one()",
"#6 [internal function]: api\\modules\\v1\\controllers\\UserController->actionWall('prog1')",
"#7 /web/yii2/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)",
"#8 /web/yii2/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)",
"#9 /web/yii2/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('wall', Array)",
"#10 /web/yii2/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('v1/user/wall', Array)",
"#11 /web/yii2/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
"#12 /web/yii2/api/web/index.php(17): yii\\base\\Application->run()",
"#13 {main}"
]
}
}
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: Как вывести данные с других таблиц тоже?

Сообщение cqfmkapb »

<code><?php


namespace api\modules\v1\controllers;

use api\filters\Auth;
use common\models\HistoryRating;
use common\models\user\Person;
use common\models\user\User;
use Yii;
use yii\data\ActiveDataProvider;
use yii\rest\Controller;
use yii\web\NotFoundHttpException;
use yii\db\ActiveQuery;

class UserController extends Controller
{


public function actionWall($login){
$user = Yii::$app->user;
$user = User::find()->where(['username' => $login])->with(['user', 'person'])->one();
if ($user) {
return $user;
}
throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

}





}</code>


with(['user', 'person']) без этого работает нормально , но при этом не могу вывести даанные из связанной таблицы


<code> public function fields()
{
return ['id', 'email', 'username', 'rating'];
}</code>


rating это поле из связанной реляцией таблицы persone
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

$user = User::find()->where(['username' => $login])->with(['user', 'person'])->one();
как мне правильно сформировать запрос чтоб вывести данные через
fields
UserController.php

<code>

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

<?php


namespace api\modules\v1\controllers;

use api\filters\Auth;
use common\models\HistoryRating;
use common\models\user\Person;
use common\models\user\User;
use Yii;
use yii\data\ActiveDataProvider;
use yii\rest\Controller;
use yii\web\NotFoundHttpException;
use yii\db\ActiveQuery;

class UserController extends Controller
{


    public function actionWall($login){
        $user = Yii::$app->user;
        $user = User::find()->where(['username' => $login])->with(['user', 'person'])->one();
        if ($user) {
            return $user;
        }
        throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

    }





}
</code>

Person.php
<code>

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

<?php

namespace common\models\user;

use Yii;

/**
 * This is the model class for table "persone".
 *
 * @property int $id
 * @property int $user_id
 * @property double $balance
 * @property double $balance_in
 * @property double $balance_out
 * @property double $credit
 * @property int $refovod
 * @property double $rating
 * @property string $referrer
 * @property int $bonus_count
 * @property int $autoriz
 *
 * @property User $user
 */
class Person extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'persone';
    }

    public function fields()
    {
        return [
            'balance',
            'credit',
            'balance',
            'refovod',
            'rating',
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['user_id', 'refovod'], 'integer'],
            [['balance', 'credit', 'rating'], 'number'],
            [['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::class, 'targetAttribute' => ['user_id' => 'id']],
        ];
    }
    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'user_id' => Yii::t('app', 'User ID'),
            'balance' => Yii::t('app', 'Balance'),
            'credit' => Yii::t('app', 'Credit'),
            'refovod' => Yii::t('app', 'Refovod'),
            'rating' => Yii::t('app', 'Rating'),
        ];
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::class, ['id' => 'user_id'])->inverseOf('person');
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getRefovodUser()
    {
        return $this->hasOne(User::class, ['id' => 'refovod']);
    }



}
</code>

User.php

<code>

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

<?php
/**
 * Created by PhpStorm.
 * User: TOSHIBA-PC
 * Date: 13.05.2018
 * Time: 19:31
 */

namespace common\models\user;

use common\models\Todo;
use common\services\cookies\CookieService;
use Yii;

class User extends \dektrium\user\models\User
{
    private $person;

    public $cookieParams;

    public static function tableName()
    {
        return 'user';
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPerson()
    {
        return $this->hasOne(Person::class, ['user_id' => 'id'])->inverseOf('user');
    }

    /** @inheritdoc */
    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
        if ($insert) {
            if (!$this->person) {
                $this->person = Yii::createObject(Person::class);
            }

            if (\Yii::$app->id == 'app-frontend') {
                $this->cookieParams = \Yii::$app->params['cookies'];
                $this->setRefovod();
                $this->setReferrer();
            }

            $this->person->link('user', $this);
        }
    }

    /**
     * Устанавливает рефовода
     * @inheritdoc
     */
    public function setRefovod()
    {
        $service = new CookieService([
            'name' => $this->cookieParams['refovod']['name'],
        ]);

        $this->person->refovod = $service->getValue();
    }

    /**
     * Устанавливает реферрер
     * @inheritdoc
     */
    public function setReferrer()
    {
        $service = new CookieService([
            'name' => $this->cookieParams['referrer']['name'],
        ]);
        $this->person->referrer = $service->getValue();
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getTodo()
    {
        return $this->hasMany(Todo::class, ['user_id' => 'id']);
    }

    public function fields()
    {
        return ['id', 'email', 'username', 'rating'];
    }

    public function extraFields()
    {
        return ['profile'];
    }
}

</code>
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Как исправить ошибку при запросе?

Сообщение cqfmkapb »

{
"name": "Unknown Property",
"message": "Getting unknown property: common\\models\\user\\User::rating",
"code": 0,
"type": "yii\\base\\UnknownPropertyException",
"file": "/web/yii2/vendor/yiisoft/yii2/base/Component.php",
"line": 154,
"stack-trace": [
"#0 /web/yii2/vendor/yiisoft/yii2/db/BaseActiveRecord.php(298): yii\\base\\Component->__get('rating')",
"#1 /web/yii2/vendor/yiisoft/yii2/base/ArrayableTrait.php(126): yii\\db\\BaseActiveRecord->__get('rating')",
"#2 /web/yii2/vendor/yiisoft/yii2/rest/Serializer.php(260): yii\\base\\Model->toArray(Array, Array)",
"#3 /web/yii2/vendor/yiisoft/yii2/rest/Serializer.php(150): yii\\rest\\Serializer->serializeModel(Object(common\\models\\user\\User))",
"#4 /web/yii2/vendor/yiisoft/yii2/rest/Controller.php(99): yii\\rest\\Serializer->serialize(Object(common\\models\\user\\User))",
"#5 /web/yii2/vendor/yiisoft/yii2/rest/Controller.php(77): yii\\rest\\Controller->serializeData(Object(common\\models\\user\\User))",
"#6 /web/yii2/vendor/yiisoft/yii2/base/Controller.php(159): yii\\rest\\Controller->afterAction(Object(yii\\base\\InlineAction), Object(common\\models\\user\\User))",
"#7 /web/yii2/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('wall', Array)",
"#8 /web/yii2/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('v1/user/wall', Array)",
"#9 /web/yii2/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
"#10 /web/yii2/api/web/index.php(17): yii\\base\\Application->run()",
"#11 {main}"
]
}

<code> public function actionWall($login){
$user = Yii::$app->user;
$user = User::find()->where(['username' => $login])->with([ 'person'])->one();
if ($user) {
return $user;
}
throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));

}
</code>
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

почему рейтинг нулл? как правильно вывести данные с таблицы

Сообщение cqfmkapb »

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

public function fields()
    {
        return ['id', 'email', 'username',
            'rating' => function () {
                return $this->rating;
            },
            ];

    }

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

    public function actionWall($login){
        $user = Yii::$app->user;
        $user = User::find()->where(['username' => $login])->with([ 'person'])->one();
        if ($user) {
            return $user;
        }
        throw new NotFoundHttpException(Yii::t('app', 'The requested user does not exist.'));


    }

{
"id": 1,
"email": "1@11@ru",
"username": "vasy1",
"rating": null
}
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: почему рейтинг нулл? как правильно вывести данные с таблицы

Сообщение yiiliveext »

Может вы будете писать в одной теме?

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

 return ['id', 'email', 'username',
            'rating' => function ($model) {
                return $model->rating;
            },
            ];
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

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

 return ['id', 'email', 'username',
            'rating' => function ($model) {
                return $model->rating;
            },
            ];

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

    public function fields()
    {
        return ['id', 'email', 'username',
            'rating' => function ($model) {
                return $model->rating;
            },
        ];

    }
"rating": null
}
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

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

    public function fields()
    {
        return ['id', 'email', 'username',
            'rating' => function () {
                return $this->getPerson($this->rating);
            },
        ];

    }
500 ошибка
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

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

public function fields()
    {
        $fields = parent::fields();
        return ['email', 'username',
            'rating' => function () {
                return $this->person->rating;
            },
            ];

    }  
null
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение yiiliveext »

cqfmkapb писал(а): 2019.12.15, 18:56

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

public function fields()
    {
        $fields = parent::fields();
        return ['email', 'username',
            'rating' => function () {
                return $this->person->rating;
            },
            ];

    }  
null

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

public function fields()
    {
        $fields = parent::fields();
        return ['email', 'username',
            'rating' => function ($model) {
                return $model->person->rating;
            },
            ];

    }  
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: почему рейтинг нулл? как правильно вывести данные с таблицы

Сообщение samdark »

yiiliveext какие?
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: почему рейтинг нулл? как правильно вывести данные с таблицы

Сообщение yiiliveext »

samdark писал(а): 2019.12.15, 21:14 yiiliveext какие?
Злые.
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

данные вывел, а как теперь их вывести на странице?
cqfmkapb
Сообщения: 162
Зарегистрирован: 2019.12.08, 15:49

Re: как мне правильно сформировать запрос чтоб вывести данные через fields

Сообщение cqfmkapb »

public function fields()
{

$fields = parent::fields();
unset($fields['autoriz'], );

return ['username', 'persone',

];

}

Как спрятать например autoriz?
Ответить