Yii создает столбец CButton для поля, которое существует в другой модели

Я пытаюсь добавить следующие функции, но не знаю, с чего начать. Буду очень признателен за любые советы, примеры или указания.

Я хочу добавить кнопку в cgridview основной модели в этом контексте. Каждая из записей, доступных в cgridview для этой модели, имеет уникальный атрибут, называемый лотом, например R3XSEF9.

В моей базе данных есть еще одна вторичная таблица/модель, в которой есть записи с таким же атрибутом лота. Однако эта таблица имеет только определенные записи из всех возможных записей, иногда дублирует и имеет набор различных атрибутов.

Что я хотел бы сделать, так это, используя атрибут лота, например, лот R3XSEF9 из моего cgridview, выполнить поиск во вторичной таблице, чтобы увидеть, есть ли одна или несколько соответствующих строк, содержащих тот же лот R3XSEF9.

Если это так, я хотел бы, чтобы кнопка отображалась в моем CButtonColumn и ссылалась на представления для соответствующих моделей вторичной таблицы. Если нет, я бы не хотел, чтобы кнопка появлялась.

Спасибо за любую помощь. Если потребуются какие-либо разъяснения, я буду рад это сделать.


person Community    schedule 26.07.2012    source источник


Ответы (1)


Прежде всего вам нужно связать таблицы, используя функцию «отношения» в классе модели. Если вы используете ограничение FOREIGN KEY в уже заполненных отношениях с БД.

Оператор SQL:

CREATE TABLE Model1
(
    ...
    FOREIGN KEY(lot) REFERENCES MainModel(lot) ON UPDATE CASCADE ON DELETE RESTRICT,
    ...
)

Класс модели:

 class MainModel extends CActiveRecord
 {
         ...

    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(
            'lots' => array(self::HAS_MANY, 'Model2', 'lot'),
        );
    }

Затем вы можете использовать пользовательский столбец кнопок в своей сетке (просмотреть файл) следующим образом:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'main-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
    ...
    array(
        'class' => 'CButtonColumn',
        'template' => '{lots}',
        'header' => 'Lots',
        'buttons' => array(
            'lots' => array(
                'label' => 'Lots',
                'imageUrl' => Yii::app()->request->baseUrl.'/img/....png',
                'url' => 'Yii::app()->createUrl("controller1/lotlistbymainid", array("id" => $data->id))',
                'visible' => 'count($data->lots) > 0',
            ),
        ),
    ),

Объяснение параметров кнопок, которые будут передаваться через массив «кнопок», вы можете найти здесь. Особенно эта часть:

свойства кнопок

общедоступный массив $buttons;

настройка дополнительных кнопок. Каждый элемент массива определяет одну кнопку, которая имеет следующий формат:

'buttonID' => array(
    'label'=>'...',     // text label of the button
    'url'=>'...',       // a PHP expression for generating the URL of the button
    'imageUrl'=>'...',  // image URL of the button. If not set or false, a text link is used
    'options'=>array(...), // HTML options for the button tag
    'click'=>'...',     // a JS function to be invoked when the button is clicked
    'visible'=>'...',   // a PHP expression for determining whether the button is visible
)
person Igor    schedule 27.07.2012
comment
ваш код частично имеет отношение к вопросу, но вместо того, чтобы просто размещать код, вы можете улучшить этот ответ, дав небольшое объяснение, указав, какие шаги/изменения должен предпринять/внести оператор, чтобы решить свою проблему. - person bool.dev; 27.07.2012
comment
2 бул.дев. Автор сказал, что буду очень признателен за любые советы, примеры или указания. Но я согласился, что его увидит множество людей, поэтому я сделал свой ответ более подходящим для ситуации автора. - person Igor; 27.07.2012
comment
все в порядке, все, что я хочу сказать, это то, что было бы хорошо, если бы вы также дали какое-то объяснение - person bool.dev; 27.07.2012
comment
Ok. Добавлен SQL-код. Теперь я не знаю, как сделать это более ясным. @bool.dev - person Igor; 27.07.2012
comment
это хорошо. вы могли бы объяснить свой код и почему вы используете buttons, template, url, visible и связать эти вещи с вопросом. Я считаю, что эти вещи являются наиболее важными. не возражаете, я просто пытаюсь помочь вам написать лучший ответ. - person bool.dev; 27.07.2012