Relational

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Relational

Сообщение Протеин »

Подскажите пжл как связь сделать в докеhttp://www.yiiframework.com/doc-2.0/gui ... ecord.html нашел вроде но что мне из этого надо я не пойму.
У меня есть 2 модели Order и Category(id,name) в Order(id,сategory_id ) , нужно при добавлении записи в Order вместо сategory_id вывести dropDownList этих name.
Насколько я понял в модели Category надо добавить

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

 public function getCategory()
    {
        return $this->hasMany(Category::className(), ['id' => 'сategory_id'])
            ->via('name');
    } 
если так то что дальше делать как теперь это в _form.php

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

<?= $form->field($model, 'сategory_id')->dropDownList( ???  
и в GridView::widget как заменить сategory_id на name ?
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: Relational

Сообщение asset »

генерацию модела делай через gii связами так будет понятливее тебе,пока. Где обратный связь?

как обычно $order->category->name

дропдаун так http://stackoverflow.com/questions/2156 ... st-in-yii2
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

asset писал(а):генерацию модела делай через gii связами так будет понятливее тебе,пока. Где обратный связь?

как обычно $order->category->name

дропдаун так http://stackoverflow.com/questions/2156 ... st-in-yii2
дропдаун заработал а вот как в

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

 <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'type_service_id',
            status_id
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); 
    
    ?>
заменить type_service_id на name? и как вместо статус ид ( там будет 0,1,2) вывести такое "<span class="label label-info">Info</span>" если 1 а если 2 то другой span
Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: Relational

Сообщение VaNnOrus »

Если вы про нормальное имя в лэйбле для поля формы, то в моделе

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

public function attributeLabels()
{
    return [
        'type_service_id' => 'Field name',
    ]
} 
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: Relational

Сообщение asset »

Протеин писал(а): заменить type_service_id на name? и как вместо статус ид ( там будет 0,1,2) вывести такое "<span class="label label-info">Info</span>" если 1 а если 2 то другой span
типа как тут https://github.com/vova07/yii2-start-bl ... ex.php#L50
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

asset писал(а):
Протеин писал(а): заменить type_service_id на name? и как вместо статус ид ( там будет 0,1,2) вывести такое "<span class="label label-info">Info</span>" если 1 а если 2 то другой span
типа как тут https://github.com/vova07/yii2-start-bl ... ex.php#L50
Спасибо!
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

VaNnOrus писал(а):Если вы про нормальное имя в лэйбле для поля формы, то в моделе

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

public function attributeLabels()
{
    return [
        'type_service_id' => 'Field name',
    ]
} 
Нет я про то чтобы вместо цифры Изображение
вывести то что стоит под индексом 7 в таблице service(id,name)
RyanTedder
Сообщения: 39
Зарегистрирован: 2013.11.09, 16:26

Re: Relational

Сообщение RyanTedder »

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

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,

    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        [
            'attribute' => 'type_service_id',
            'value' => function ($model) {
                if ($model->status == \backend\models\YiiManager::STATUS_INACTIVE)
                    return "Деактивирован";

                if ($model->status == \backend\models\YiiManager::STATUS_ACTIVE)
                    return "Активирован";

            },
        ],
        
        ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); 
    
Думаю суть понял)
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

RyanTedder писал(а):

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

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,

    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        [
            'attribute' => 'type_service_id',
            'value' => function ($model) {
                if ($model->status == \backend\models\YiiManager::STATUS_INACTIVE)
                    return "Деактивирован";

                if ($model->status == \backend\models\YiiManager::STATUS_ACTIVE)
                    return "Активирован";

            },
        ],
        
        ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); 
    
Думаю суть понял)
хахахах :D :D :D
а если у меня тех id больше 100 будет? в yii1 это делалось так

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

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'services' => array(self::HAS_MANY, 'order', 'type_service_id'),
        );
    }
а в yii 2 как такое сделать ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Relational

Сообщение zelenin »

'relation_name.attribute_name' - это название колонки в гриде
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

zelenin писал(а):'relation_name.attribute_name' - это название колонки в гриде

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

Unknown Property
Возникла внутренняя ошибка сервера.
exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: frontend\models\Order::services' in 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Relational

Сообщение zelenin »

Протеин писал(а):
zelenin писал(а):'relation_name.attribute_name' - это название колонки в гриде

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

Unknown Property
Возникла внутренняя ошибка сервера.
exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: frontend\models\Order::services' in 
как объявлена связь в Order?
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

zelenin писал(а):
Протеин писал(а):
zelenin писал(а):'relation_name.attribute_name' - это название колонки в гриде

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

Unknown Property
Возникла внутренняя ошибка сервера.
exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: frontend\models\Order::services' in 
как объявлена связь в Order?
Ну вот в чем и был заключен мой вопрос я спрашивал как ее задать.. в доках я не нашел или не в ту сторону смотрел
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Relational

Сообщение zelenin »

самую обычную связь http://www.yiiframework.com/doc-2.0/gui ... ional-data
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

zelenin писал(а):самую обычную связь http://www.yiiframework.com/doc-2.0/gui ... ional-data

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

    public function getTypeService()
    {
        return $this->hasOne(Service::className(), ['id' => 'type_service_id']);
    } 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Relational

Сообщение zelenin »

Протеин писал(а):
zelenin писал(а):самую обычную связь http://www.yiiframework.com/doc-2.0/gui ... ional-data

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

    public function getTypeService()
    {
        return $this->hasOne(Service::className(), ['id' => 'type_service_id']);
    }
теперь 'typeService.name' или что у вас там за атрибут..
Аватара пользователя
Протеин
Сообщения: 98
Зарегистрирован: 2013.03.19, 16:36

Re: Relational

Сообщение Протеин »

zelenin писал(а):
Протеин писал(а):
zelenin писал(а):самую обычную связь http://www.yiiframework.com/doc-2.0/gui ... ional-data

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

    public function getTypeService()
    {
        return $this->hasOne(Service::className(), ['id' => 'type_service_id']);
    } 
теперь 'typeService.name' или что у вас там за атрибут..
а тю а я пишу "typeService.type_service_id'
СПАСИБО!
Ответить