Q: BootDetailView をこのように表示するにはどうすればよいですか?
Users
name : aa
company : test
department : dep1
section : sec1.1
team : team1.1.1
私は2つのtbls(部門とユーザー)を持っています
これは部門のテーブル構造です
department
id | name | p_id | company_id
1 | dep1 | 0 | 1
2 | dep2 | 0 | 1
3 | sec1.1 | 1 | 1
4 | sec2.1 | 2 | 1
5 | team1.1.1 | 3 | 1
6 | team1.1.2 | 3 | 1
7 | team2.1.1 | 4 | 1
これはユーザーの tbl 構造です
user
id | name | company_id | team_id
1 | aa | 1 | 5
2 | bb | 1 | 5
3 | cc | 1 | 7
4 | dd | 1 | 6
5 | ee | 1 | 6
ユーザーモデルに関係を追加しました
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(
'ranks' => array(self::BELONGS_TO, 'Rank', 'rank_id'),
'companies' => array(self::BELONGS_TO, 'Company', 'company_id'),
'departments' => array(self::BELONGS_TO, 'Department', 'team_id'),
);
}
このビュー(CGridViewはindex.php(ビュー)で使用しています)
<?php $this->widget('bootstrap.widgets.BootDetailView', array(
'data'=>$model,
'attributes'=>array(
//array('name'=>'id', 'label'=>'ID'),
array('name'=>'login_name', 'label'=>'Name'),
array('name'=>'first_name', 'label'=>'First Name'),
array('name'=>'last_name', 'label'=>'last Name'),
array('name'=>'email', 'label'=>'Email'),
array('name'=>'created', 'label'=>'Created'),
array('name'=>'ranks.name', 'label'=>'Rank'),
array('name'=>'companies.name', 'label'=>'Company'),
array('name'=>'departments.name', 'label'=>'Team'),
),
)); ?>
これはコントローラーです
public function actionView($id)
{
$model = $this->loadModel($id);
$sql = 'SELECT id, name FROM rank r WHERE r.id = '. $model->rank_id;
$rank = Yii::app()->db->createCommand($sql)->queryAll();
$sql = 'SELECT id, name FROM company c WHERE c.id = '. $model->company_id;
$company = Yii::app()->db->createCommand($sql)->queryAll();
$dst = $this->getDST($model->team_id);
$this->render('view',array(
'model'=>$model,
'rank'=>$rank[0]['name'],
'company'=>$company[0]['name'],
'department'=>$dst['department'],
'section'=>$dst['section'],
'team'=>$dst['team'],
));
}
public function getDST($team_id) // Getting the Department, Section and Team
{
$records = Department::model()->find('id=:id', array(':id'=>$team_id));
if($records->p_id == 0 ) {
$dst['department'] = $model->team_id;
$dst['section'] = NULL;
$dst['team'] = NULL;
} else {
$records = Department::model()->find('id=:id', array(':id'=>$records->p_id));
if($records->p_id == 0 ) {
$dst['department'] = $records->id;
$dst['section'] = $model->team_id;
$dst['team'] = NULL;
} else {
$dst['section'] = $records->id;
$dst['team'] = NULL;
$records = Department::model()->find('id=:id', array(':id'=>$records->p_id));
if($records->p_id == 0 ) {
$dst['department'] = $records->id;
$dst['team'] = $model->team_id;
}
}
}
return $dst;
}