ventajas tutorial framework ejemplos desventajas descargar create php mysql yii

tutorial - problema de php yii framework con objetos(2)



yii2 basic (2)

Escribe tu código como beow: -

// CGridView column definition: ''columns''=>array( array( ''name''=>''naziv'', ''value''=>''$data->studijskiProgram->naziv'', ''type''=>''text'', ), // Preparing the DataProvider in the model: return new CActiveDataProvider(get_class($this),array( ''sort''=>array( ''multiSort''=>false, ''attributes''=>array( ''naziv''=>array( ''desc''=>''naziv desc'', ),

Esto es algo así como la continuación de la pregunta que ya publiqué " php yii framework issue with objects ", pero surgió un nuevo problema, así que estoy publicando una nueva pregunta para una mejor visualización del código y una explicación de lo que está mal. Esta es la parte problemática del código:

<?php $this->widget(''zii.widgets.grid.CGridView'', array( ''id''=>''predmet-grid'', ''dataProvider''=>$model->search(), ''filter''=>$model, ''columns''=>array( //array( // ''name''=>''naziv'', // ''value''=>$model->studijskiProgram->naziv, //), ''sp_id'', ''naziv'', ''semestar'', ''predavanja'', ''vjezbe'', //array( // ''class''=>''CButtonColumn'', //), ), )); ?>

Y este es el código de la clase modelo donde se ubican las relaciones:

<?php /** * This is the model class for table "predmet". * * The followings are the available columns in table ''predmet'': * @property integer $id * @property integer $sp_id * @property string $naziv * @property integer $semestar * @property integer $predavanja * @property integer $vjezbe */ class Predmet extends CActiveRecord { /** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return Predmet the static model class */ const STATUS_O = "O"; const STATUS_I = "I"; const STATUS_VP = "VP"; public static function model($className=__CLASS__) { return parent::model($className); } /** * @return string the associated database table name */ public function tableName() { return ''predmet''; } /** * @return array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array(''sp_id, naziv, semestar, predavanja, vjezbe, status'', ''required''), array(''sp_id, semestar, predavanja, vjezbe'', ''numerical'', ''integerOnly''=>true), array(''naziv'', ''length'', ''max''=>100), // The following rule is used by search(). // Please remove those attributes that should not be searched. array(''id, sp_id, naziv, semestar, predavanja, vjezbe, status'', ''safe'', ''on''=>''search''), ); } /** * @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. //POVEZUJEMO PREDMET I STUDIJSKI PROGRAM //BELONGS_TO ide za vezu jedan u vise(kad na stranu 1 pisemo kome pripada) //HASMANY ili HAS_MANY (?) JE ZA VISE U JEDAN /*ovo prvo ''studijskiProgram'' je kao pokazivac na studijski program s kojim je povezan Neka imamo $predmet. da bi pristupili nazivu studijskog programa kome pripada, koristicemo: $predmet->studijskiProgram->naziv */ return array( ''studijskiProgram'' => array(self::BELONGS_TO, ''StudijskiProgram'', ''sp_id'') ); } /** * @return array customized attribute labels (name=>label) */ public function attributeLabels() { return array( ''id'' => ''ID'', ''sp_id'' => ''Studijski program'', ''naziv'' => ''Naziv'', ''semestar'' => ''Semestar'', ''predavanja'' => ''Predavanja'', ''vjezbe'' => ''Vjezbe'', ''status'' => ''Status'' ); } /** * Retrieves a list of models based on the current search/filter conditions. * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */ public function search() { // Warning: Please modify the following code to remove attributes that // should not be searched. $criteria=new CDbCriteria; $criteria->compare(''id'',$this->id); $criteria->compare(''sp_id'',$this->sp_id); $criteria->compare(''naziv'',$this->naziv,true); $criteria->compare(''semestar'',$this->semestar); $criteria->compare(''predavanja'',$this->predavanja); $criteria->compare(''vjezbe'',$this->vjezbe); return new CActiveDataProvider($this, array( ''criteria''=>$criteria, )); } //Funkcija za punjenje Combo box-a (Wombo) public function uzmiStatusPredmeta() { return array( self::STATUS_O => ''Obavezni'', self::STATUS_I => ''Izborni'', self::STATUS_VP => ''VP'' ); } public function uzmiSpisakStudijskihPrograma() { $query = ''select id, naziv from studijski_program''; $rezultat = Yii::app()->db->createCommand($query)->queryAll(); $spisak = CHtml::listData($rezultat,''id'',''naziv''); //prikazuje naziv, krije ID(valjda radi combo boxa-wombo ?) return $spisak; } public function vratiProgram() { $query = ''select s.naziv from studijski_program s,predmet p where p.sp_id = s.id''; $rezultat = Yii::app()->db->createCommand($query)->queryScalar(); //$rezultat1 = implode($rezultat); //$rezultat2 = implode($rezultat1); return $rezultat; } public function vratiProgramId() { $query = ''select s.id from studijski_program s,predmet p where p.sp_id = s.id''; $rezultat = Yii::app()->db->createCommand($query)->queryScalar(); //$rezultat1 = implode($rezultat); //$rezultat2 = implode($rezultat1); return $rezultat; } }

Como puede ver aquí, existe una relación con "studijskiProgram" aquí utilizando la clave foránea "sp_id" en "predmet". Sin embargo, cuando estoy tratando de acceder a "naziv" proprety de "studijskiProgram" en la parte superior del código de esta manera:

array( ''name''=>''naziv'', ''value''=>$model->studijskiProgram->naziv, ),

que fue la solución con la pregunta anterior donde se usa el widget CDeatilView. Por alguna razón, lo mismo aquí no funciona e informa el error de tratar de obtener una propiedad de un objeto no. ¿Alguna idea de qué alterar para que funcione?


Yii Gridview toma el proveedor de datos y genera las filas. Puedes probar este.

Por favor, mira aquí más detalles. http://www.yiiframework.com/doc/api/1.1/CGridView

array( ''name'' => ''naziv'', ''value'' => ''(isset($data->studijskiProgram->naziv))?$data->studijskiProgram->naziv:""'' ),