質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

2回答

1335閲覧

cakephp

amaguri

総合スコア227

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/10/18 05:58

編集2016/10/18 06:28

DBテーブルに格納されているデータ

Array ( [0] => Array ( [DBS] => Array ( [DB_ID] => 1 [NAME] =>default ) ) [1] => Array ( [DBS] => Array ( [DB_ID] => 2 [NAME] => temp ) ) 以下略

TBLSテーブルに格納されているデータ

Array ( [0] => Array ( [TBLS] => Array ( [DB_ID] => 1 [TBL_ID] => 1001 [TBL_NAME] => tesut1_abc ) ) [1] => Array ( [TBLS] => Array ( [DB_ID] => 2 [TBL_ID] => 1002 [NAME] => test2_def ) )

考えているクエリ

select * from DBS;(全DB一覧取得) クリックされたらそのDB_IDを取得する $db_id=DB_ID; select * from TBLS where DB_ID =$db_id;(テーブル一覧取得)

現状
イメージ説明
イメージ説明

controller <?php class EntityController extends AppController { var $name = 'Entity'; var $components = array('RequestHandler','Auth','Common'); var $user; function index() { $this->Entity->setDataSource('hive'); //$this->layout='entity';//使用するレイアウト //DB一覧取得 $sql ="select * from DBS;"; $result= $this->Entity->query($sql); $this->set('para', $result); } public function entity_tbl($db_id){ $this->Entity->setDataSource('hive'); $sql ="select * from TBLS where DB_ID =$db_id;"; $result= $this->Entity->query($sql); $this->set('para', $result); } }
index.ctp <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> </head> <body> <h2>DB一覧</h2> <ul> <?php foreach($para as $name): ?> <li><?php echo h($name['DBS']['NAME']) ?></li> <?php $db_id=$name['DBS']['DB_ID'] ?> <!--<?php debug($db_id); ?>--> <?php endforeach; ?> </ul> <?php echo $this->Html->link('テーブル一覧',array('action'=>'entity_tbl',$name['DBS']['DB_ID'])); ?> </body> </html>
entiti_tbl.ctp <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> </head> <body> <h2>テーブル一覧</h2> <ul> <?php foreach($para as $name): ?> <li><?php echo h($name['TBLS']['TBL_NAME']) ?></li> <!--<?php $db_id=$name['DBS']['DB_ID'] ?>--> <!--<?php debug($db_id); ?>--> <?php endforeach; ?> </ul> </body> </html>

現在ここまで出来ております。
次にこの表示されているDBのNAMEがクリックされたら
その$nameから
$db_id=DB_ID;でDB_IDを取得し
select * from TBLS where DB_ID =$db_id;(テーブル一覧取得)
のクエリが流れるようにしたいのですが
どうしたらこの表示されているのをNAMEデータをリンクにしさらに
select * from TBLS where DB_ID =$db_id;
が流れTBLSのTBL_NAMEを表示することができますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/10/18 06:52

タイトルはちゃんと書いてください。
guest

回答2

0

どうしたらこの表示されているのをNAMEデータをリンクにし

aタグを使えばリンクにできますよ

php

1<a href='/entity/detail/<?= h($name['DBS']['DB_ID'])' ?>xxx</a>

select * from TBLS where DB_ID =$db_id;
が流れTBLSのTBL_NAMEを表示することができますでしょうか?

前回も回答しましたが...EntityControllerに別のアクションを作ったらできますよ

php

1function detail($db_id) { 2 // sql実行など... 3}

投稿2016/10/18 06:25

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/10/18 06:48 編集

<a href='/entity/entity_tbl/<?= h($name['DBS']['DB_ID'])' ?>xxx</a> をしたら データベース名が表示されなくなってしましました。。 xxxのみしか表示されずまた public function entity_tbl($db_id){}を作りましたが xxxをクリックすると The requested URL /entity/entity_tbl/< was not found on this server. と怒られてしまします。 function detail($db_id) { // sql実行など... } 追記にて
popobot

2016/10/18 06:47

あくまでサンプルコードなので、xxxのところにデータベース名の出力を入れてくださいね functoin entityTbl($db_id){}とすれば、/entity/entity_tblでアクセスできると思いますよ
amaguri

2016/10/18 07:09 編集

表示に関して <li><a href="WebHive/entity/entity_tbl"><?php echo h($name['DBS']['NAME'])?></a></li> とすることで解決できました。 それとも <a href='/entity/entity_tbl/<?= h($name['DBS']['DB_ID'])' ?>xxx</a> このxxxの中を帰るのが正しい処理でしょうか? >が一つ足りない気がしているのですが。
popobot

2016/10/18 07:10

表示のコードはそれでいいと思いますよ! >が足りてなかったですね...すみませんでした
amaguri

2016/10/19 01:04

ありがとうございます。遷移はできるようになったのでコントローラーの修正を行いたいと思います
guest

0

cakephpではHtmlHelperという便利なヘルパーがあります。
上記リンク先のサンプルコードそのままですが

PHP

1echo $this->Html->link( 2 'Enter', 3 '/pages/home', 4 ['class' => 'button', 'target' => '_blank'] 5);

この出力結果は

HTML

1<a href="/pages/home" class="button" target="_blank">Enter</a>

となります。

若しくは、ルーティングを設定し、そのルーティングに応じたリンクを生成する方法もあります。
私は大体いつもこの方法を使っています。

例えば、「http://example.com/Entity/entity_tbl/3」と言うようなURLで、$db_id=3のデータを表示したい場合

PHP

1Router::connect( 2 '/Entity/entity_tbl/:db_id', 3 ['controller' => 'Entity', 'action' => 'entity_tbl'], 4 ['db_id' => '\d+', 'pass' => ['db_id']] 5);

をroutes.phpに記述する事で実現できます。
※このあたりは上でリンクを張ったCookBook参照ください

次に、/Entity/entity_tbl/3 のリンクを生成する方法ですが、これもRouterクラスを使うとURLが自動で作られます。

PHP

1echo Router::url(['controller' => 'Entity', 'action' => 'entity_tbl', 'id' => 3]);

ルーティングが正しく設定されていれば、この結果は「/Entity/entity_tbl/3」になるはずです。

後は、これに動的にIDを埋め込むようにすればよいだけですので、質問文のコードを参考にすれば

PHP

1 <?php foreach($para as $name): ?> 2 <li> 3 <?php 4 echo $this->Html->link( 5 h($name['TBLS']['TBL_NAME']), 6 Router::url(['controller' => 'Entity', 'action' => 'entity_tbl', 'id' => $name['TBLS']['DB_ID']]) 7 ); 8 ?> 9 </li> 10 <?php endforeach; ?>

と言う感じになります。

$db_idは、そのままでも取れそうに思いますが、

PHP

1$this->params['db_id']

で、取得可能です。

投稿2016/10/18 07:14

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/10/19 02:23

Router::connect( '/Entity/entity_tbl/:db_id', ['controller' => 'Entity', 'action' => 'entity_tbl'], ['db_id' => '\d+', 'pass' => ['db_id']] ); をroutes.phpに記載したところParse error: syntax error, unexpected '[' in /var/www/html/WebHive/app/config/routes.php on line 38 と怒られてしまいます。バージョンの問題でしょうか?cake1.3になります
amaguri

2016/10/19 02:47 編集

あと混乱してしまっているのですが <?php foreach($para as $name): ?> <li> <?php echo $this->Html->link( h($name['TBLS']['TBL_NAME']), Router::url(['controller' => 'Entity', 'action' => 'entity_tbl', 'id' => $name['TBLS']['DB_ID']]) ); ?> </li> <?php endforeach; ?> のコードはentity_tbl.ctp に記入するということであっていますでしょうか?
kunai

2016/10/20 01:41

[がunexpectedと言われるのはPHPのバージョンですね、多分。 [ ] のところを array() に変えてみてください。 ['controller' => 'Entity', 'action' => ・・・] だったら array('controller' => 'Entity', 'action' => ・・・) のように。 また、$this->Html->link・・・の記述場所はCTPファイルであっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問