Table: テーブル例
| id | user_id | math | english | physics |
| 1 | 1 | 49 | 36 | 56 |
| 2 | 2 | 45 | 48 | 42 |
| 3 | 3 | 72 | 80 | 91 |
<?php
class User extends AppModel
{
var $name = 'User';
// var $hasOne = 'Profile';
var $hasOne = 'Exam';
var $hasMany = 'Diary';
}
?>
Model に exam.php を追加
<?php
class Exam extends AppModel
{
var $name = 'Exam';
var $belongsTo = 'User';
}
?>
Controller にある users_controller.php に以下を追加
function exam($param = null) {
if (!$param) {
/* デフォルトは math を表示 */
$param = 'math';
$this->set('graph_path', 'exam_graph/' . $param);
}
else {
$this->set('graph_path', '../exam_graph/' . $param);
}
$this->set('param', $param);
}
function exam_graph($param = null) {
/* JpGraph を使用する */
App::import('Vendor', 'jpgraph/jpgraph');
App::import('Vendor', 'jpgraph/jpgraph_bar');
/* DB から値を取得 */
$users = $this->User->find('all');
$ydata = array();
$a = array();
/* 値を取り込む */
foreach ($users as $user) {
array_push($ydata, $user['Exam'][$param]);
array_push($a, $user['User']['username']);
}
/* グラフ作成 */
$graph = new Graph(350, 250, "auto");
$graph->SetScale("textlin");
/* X軸項目追加 */
$graph->xaxis->SetTickLabels($a);
/* plot作成 */
$bplot = new BarPlot($ydata);
/* グラフ上に描画 */
$graph->Add($bplot);
/* グラフ表示 */
$graph->Stroke();
}
exam.ctp を作成
<html> <head> <title></title> </head> <body> <h1><?php echo $param; ?></h1> <?php echo '<img src="' . $graph_path . '" />'; ?> <hr> </body> </html>結果
- cake/users/exam にアクセスすると数学の結果が表示される
- cake/users/exam/math にアクセスすると数学の結果が表示される
- cake/users/exam/english にアクセスすると英語の結果が表示される
- cake/users/exam/physics にアクセスすると物理の結果が表示される
0 件のコメント:
コメントを投稿