2016-01-28 2 views
0

Я создаю веб-сайт как школьный проект с использованием рамки yii. Я использую пакет XAMPP (в частности, Apache и MySql). Я создал базу данных в phpmyadmin с некоторыми таблицами, создал необходимые отношения между ними. Теперь у меня есть вопрос со следующей части кода в admin.php файле:php yii framework проблема с объектами

<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model, 
'attributes'=>array(
    //'ID', 
    'profesor_id', 
    'predmet_id', 
    'sala', 
    'od_id', 
    'do_id', 
    'dan_id', 
), 
)); ?> 

Теперь это является основной моделью PHP файл Raspored.php (admin.php находится в каталоге/просмотров/raspored):

<?php 

/** 
* This is the model class for table "raspored". 
* 
* The followings are the available columns in table 'raspored': 
* @property integer $ID 
* @property integer $profesor_id 
* @property integer $predmet_id 
* @property integer $sala_id 
* @property integer $od_id 
* @property integer $do_id 
* @property integer $dan_id 
* 
* The followings are the available model relations: 
* @property Predmet $predmet 
* @property Dan $dan 
* @property Profesor $profesor 
* @property Sala $sala 
*/ 
class Raspored extends CActiveRecord 
{ 
    /** 
* Returns the static model of the specified AR class. 
* @param string $className active record class name. 
* @return Raspored the static model class 
*/ 
public static function model($className=__CLASS__) 
{ 
    return parent::model($className); 
} 

/** 
* @return string the associated database table name 
*/ 
public function tableName() 
{ 
    return 'raspored'; 
} 

/** 
* @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('profesor_id, predmet_id, sala_id, od_id, do_id, dan_id', 'required'), 
     array('profesor_id, predmet_id, sala_id, od_id, do_id, dan_id', 'numerical', 'integerOnly'=>true), 
     // The following rule is used by search(). 
     // Please remove those attributes that should not be searched. 
     array('ID, profesor_id, predmet_id, sala_id, od_id, do_id, dan_id', '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. 
    return array(
     'predmet' => array(self::BELONGS_TO, 'Predmet', 'predmet_id'), 
     'dan' => array(self::BELONGS_TO, 'Dan', 'dan_id'), 
     'profesor' => array(self::BELONGS_TO, 'Profesor', 'profesor_id'), 
     'sala' => array(self::BELONGS_TO, 'Sala', 'sala_id'), 
     'terminod' => array(self::BELONGS_TO, 'Termin', 'od_id'), 
     'termindo' => array(self::BELONGS_TO, 'Termin', 'do_id'), 
    ); 
} 

/** 
* @return array customized attribute labels (name=>label) 
*/ 
public function attributeLabels() 
{ 
    return array(
     'ID' => 'ID', 
     'profesor_id' => 'Profesor', 
     'predmet_id' => 'Predmet', 
     'sala_id' => 'Sala', 
     'od_id' => 'Od', 
     'do_id' => 'Do', 
     'dan_id' => 'Dan', 
    ); 
} 

/** 
* 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('profesor_id',$this->profesor_id); 
    $criteria->compare('predmet_id',$this->predmet_id); 
    $criteria->compare('sala_id',$this->sala_id); 
    $criteria->compare('od_id',$this->od_id); 
    $criteria->compare('do_id',$this->do_id); 
    $criteria->compare('dan_id',$this->dan_id); 

    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 

public function uzmiSpisakDana() 
{ 
    $query = 'select id, naziv from dan'; 
    $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 uzmiSpisakTermina() 
{ 
    $query = 'select id, naziv from termin'; 
    $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 uzmiSpisakProfesorPredmet() 
{ 
    $query = 'select a.id, CONCAT(prof.naziv, ", ", pred.naziv) as naziv 
    from angazman a, profesor prof, predmet pred 
    where a.profesor_id = prof.id and a.predmet_id = pred.id'; 
    $rezultat = Yii::app()->db->createCommand($query)->queryAll(); 
    $spisak = CHtml::listData($rezultat, 'id', 'naziv'); //prikazuje naziv, krije ID(valjda radi combo boxa-wombo ?) 

    return $spisak; 
} 
} 

Как вы видите, есть отношение к базе данных профессора в этом файле, и я пытаюсь заменить Professor_id в виджетах в верхнем коде с его фактическим именем из таблицы профессора. В некоторых других частях кода, как это:

<?php echo CHtml::encode($data->profesor->naziv); ?> 

он прекрасно работает, но в этом виджете, когда я пытаюсь что-то вроде этого:

'profesor_id'=>$model->profesor->naziv, 

следующая ошибка выскакивает «Атрибут должен указывается в формате «Имя: Тип: Метка» ». Я пробовал некоторые другие способы доступа к этому атрибуту здесь, но с небольшим успехом, поэтому я остался невежественным. Есть какой-либо способ сделать это ?

ответ

0

кажется необходим этот формат

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model, 
    'attributes'=>array(
     //'ID', 
     array('name'=>'profesor_id', 
      'value' => $model->profesor->naziv,), // or $data->profesor->naziv 
     'predmet_id', 
     'sala', 
     'od_id', 
     'do_id', 
     'dan_id', 
), 
)); ?> 
+0

спасибо человеку большую помощь, что решить это –

+0

поэтому я ecountered почти такая же проблема со следующей части кода: ' виджета ('Зии. widgets.grid.CGridView 'массив ( \t 'ID'=> 'raspored сетки', \t 'DataProvider'=> $ модели-> поиск(), \t 'фильтр'=> $ модель, \t' columns '=> array ( \t \t // 'ID', \t \t массив ('имя' => 'naziv', \t \t \t 'значение' => $ модели-> profesor-> naziv, ), \t \t // 'profesor_id', \t \t 'predmet_id', \t \t 'sala_id', \t \t 'od_id', \t \t 'do_id', \t \t 'dan_id', \t \t массив ( \t \t \t 'класс' => 'CButtonColumn', \t \t), \t), )); ?> ' Теперь это кажется почти идентичным, за исключением того, что это какой-то гаджет gridview, и он говорит, что я пытаюсь получить представление о не объекте ... –

+0

@waltdisney, пожалуйста, разместите этот последний вопрос как новый вопрос и правильно отформатируйте его я вижу это правильно, без путаницы с первой частью, которая уже решена. – scaisEdge

0
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model, 
'attributes'=>array(
    //'ID', 
    array(
      'name'=>'naziv', 
      'header'=>$model->getAttributeLabel('naziv'), 
      'value'=>'($model->profesor ? $model->profesor->naziv : "empty")', 
     ), 
    'predmet_id', 
    'sala', 
    'od_id', 
    'do_id', 
    'dan_id', 
), 
)); ?> 
+0

спасибо, это также решает проблему, просто определенное редактирование. Эта строка 'value' => '($ model-> profesor?$ model-> profesor-> naziv: "empty") 'не получилось так, я удалил эту вторую пару одинарных кавычек, и это было хорошо –

Смежные вопросы