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

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

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

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

Q&A

0回答

359閲覧

他のテーブルのデータを取得してセレクトボックスで表示する方法

kuuhaku4262

総合スコア39

CakePHP

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

0グッド

0クリップ

投稿2019/11/21 07:51

編集2019/11/21 07:53

前提・実現したいこと

cakephp2系でマスタ画面を作成しています。
そのマスタの編集画面でセレクトボックスを表示させ、その中身を他のテーブルから持ってきたいです。
様々なサイトを拝見しましたが、初心者のため書いてあることがよくわからない状態です。
ですので内容を噛み砕いて、どのようにすればできるのかを解説していただきたいです。
以下に、作成中のファイルのコードを載せておきますので解説の際に使っていただけると幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

cakephp

1MtEmployeesController.php 2 3App::uses('AppController', 'Controller'); 4 5class MtEmployeesController extends AppController { 6 7 public function index() { 8 } 9 10 11 public function search() { 12 13 $this->autoRender = false; 14 $this->response->type('json'); 15 16 if ($this->request->is('get')) { 17 18 $shift = $this->employeess(); 19 20 return json_encode(['success' => 'success', 'data' => $shift ]); 21 } 22 23 24 $this->response->statusCode(403); 25 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 26 } 27 28 public function detail($id = 0) { 29 $this->autoRender = false; 30 $this->response->type('json'); 31 32 // $idの確認 33 if (! ctype_digit($id) && $id !== 0) { 34 $this->response->statusCode(403); 35 return json_encode(['error' => ['message' => 'ID以外の値が渡されました。'. $id]]); 36 } 37 38 39 if ($this->request->is('get')) { 40 41 $shift = $this->MtEmployee->find('first', ['conditions' => ['id' => $id]]); 42 43 if (empty($shift)) { 44 $this->response->statusCode(404); 45 return json_encode(['error' => ['message' => '未登録のIDが指定されました。'. $id]]); 46 } else { 47 return json_encode(['success' => 'success', 'data' => $shift]); 48 } 49 } elseif ($this->request->is('post')) { 50 51 if ($id > 0) { 52 $this->request->data['MtEmployee']['id'] = $id; 53 $this->MtEmployee->id = $id; 54 $data['id'] = $id; 55 } else { 56 $this->MtEmployee->create(); 57 } 58 59 if ($this->MtEmployee->save($this->data)) { 60 if ($id <= 0) { 61 $id = $this->MtEmployee->id; 62 } 63 64 return json_encode(['success' => 'success', 'data' => $this->request->data]); 65 } else { 66 $this->response->statusCode(500); 67 return json_encode(['error' => ['message' => '保存に失敗しました。']]); 68 } 69 } elseif ($this->request->is('delete')) { 70 // 削除 71 72 if ($id > 0) { 73 /* if ($this->User->find('count', ['conditions' => ['MtOffice_id' => $id]]) > 0) { 74 * $this->response->statusCode(403); 75 * return json_encode(['error' => ['message' => '使用中の権限です。未使用にしてから削除してください。']]); 76 * } */ 77 78 $this->MtEmployee->id = $id; 79 if ($this->MtEmployee->delete($id, true)) { 80 return json_encode(['success' => 'success', 'data' => []]); 81 } else { 82 $this->response->statusCode(500); 83 return json_encode(['error' => ['message' => '削除に失敗しました。']]); 84 } 85 86 } else { 87 $this->response->statusCode(403); 88 return json_encode(['error' => ['message' => 'IDを送信してください。']]); 89 } 90 } 91 92 $this->response->statusCode(403); 93 return json_encode(['error' => ['message' => '仕様で定義されていないMETHODです。']]); 94 } 95 96 97 private function employeess() { 98 return $this->MtEmployee->find('all', ['order' => 'order_no']); 99 } 100 public function initialize(){ 101 parent::initialize(); 102 $this->MtSections = TableRegistry::getTableLocator()->get("mt_sections"); 103 } 104} 105

cakephp

1index.ctp 2 3<?php 4echo $this->Html->css('modal',[ 'inline' => false ]); 5echo $this->Html->css('animate.min.css',[ 'inline' => false ]); 6echo $this->Html->css('dialog',[ 'inline' => false ]); 7echo $this->Html->css('loading-modal',[ 'inline' => false ]); 8echo $this->Html->css('MtEmployee/index.css',[ 'inline' => false ]); 9 10echo $this->Html->script('webapi.js',[ 'inline' => false ]); 11echo $this->Html->script('modal.js',[ 'inline' => false ]); 12echo $this->Html->script('loading-modal.js',[ 'inline' => false ]); 13echo $this->Html->script('animate.js',[ 'inline' => false ]); 14echo $this->Html->script('dialog.js',[ 'inline' => false ]); 15echo $this->Html->script('view/MtEmployees/index.js',[ 'inline' => false ]); 16 17?> 18<h1>社員マスタ</h1> 19 20<a href="#new" data-bind="click: newDetail">新規登録</a> 21<table> 22 <thead> 23 <tr> 24 <th></th> 25 <th>部署</th> 26 <th>仕事区分</th> 27 <th>雇用区分</th> 28 <th>氏名</th> 29 <th>社員番号</th> 30 <th>表示順</th> 31 </tr> 32 </thead> 33 34 <tbody data-bind="foreach: employeess"> 35 <tr> 36 <td><a href="#edit" data-bind="click: showDetail">編集</a></td> 37 <td data-bind="text: MtEmployee.mt_section_id"></td> 38 <td data-bind="text: MtEmployee.work_type"></td> 39 <td data-bind="text: MtEmployee.mt_employemnt_class_id"></td> 40 <td data-bind="text: MtEmployee.employee_name"></td> 41 <td data-bind="text: MtEmployee.employee_number"></td> 42 <td data-bind="text: MtEmployee.order_no"></td> 43 <td><a href="#delete" data-bind="click: deleteDetail">削除</a></td> 44 </tr> 45 </tbody> 46</table> 47 48 49 50 51<div class="modal employees-edit-modal" style="display:none"> 52 <div class="modal-window"> 53 <div class="modal-header"> 54 <h2 class="modal-title">社員編集</h2> 55 56 <button class="modal-close-button modal-cancel-button">&times</button> 57 </div> 58 <div class="modal-content"> 59 60 <?php echo $this->Form->create('MtEmployee', ['id' => 'employeesEditForm', 61 'action' => 'detail', 62 'submit' => 'return false', 63 'inputDefaults' => ['label' => false, 'div' => false, 'legend' => false] ])?> 64 65 <div class="input "> 66 <label for="" >勤務体系番号</label> 67 68 <input name="data[MtEmployee][employees_number]" data-bind="value: detail.employees_number"/> 69 </div> 70 71 <div class="input "> 72 <label for="" >仕事区分</label> 73 74 <input name="data[MtEmployee][employees_name]" data-bind="value: detail.work_type"/> 75 </div> 76 77 <div class=""> 78 <label for="" class="info-item-header">表示順</label> 79 80 <!-- ko if: detail.id() > 0 --> 81 <select name="data[MtEmployee][order_no]" data-bind="options: orderNumbers, value: detail.orderNo"></select> 82 <!-- /ko --> 83 84 <!-- ko if: detail.id() <= 0 --> 85 <span data-bind="text: newOrderNumber"></span> 86 <input name="data[MtEmployee][order_no]" type="hidden" data-bind="value: newOrderNumber"/> 87 <!-- /ko --> 88 89 </div> 90 91 <div class="modal-buttons"> 92 <button class="modal-decide-button decision-button" 93 id ="employeesSaveButton" 94 type="button" 95 data-bind= "click: saveDetail">保存</button> 96 <button class="modal-cancel-button cancel-button" type="button">キャンセル</button> 97 </div> 98 99 <?php echo $this->Form->end(); ?> 100 </div> 101 </div> 102</div> 103 104<?php echo $this->element('loading-modal'); ?> 105<?php echo $this->element('dialog'); ?> 106

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

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

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

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

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

nojimage

2019/11/22 02:48

コードをみるに今の段階で回答を得るのははちょっと難しい内容かと思います。フロント側がCakePHPの標準的な作り方ではなく、おそらくKnockout.jsとの組み合わせによって制御されているため、双方の知識が必要となります。問題に取り組むための基礎的な知識が不足している状態ですので、CakePHP, Knockout.js 双方の基本チュートリアルを行ってみましょう。そうすれば何をすればいいのかわかってくると思います。
kuuhaku4262

2019/11/23 08:36

基本チュートリアルというのはどのようなものなのでしょうか?
nojimage

2019/11/25 10:27

CakePHPであれば、ブログチュートリアル https://book.cakephp.org/2/ja/getting-started.html コントローラ - 2.x https://book.cakephp.org/2/ja/controllers.html モデル - 2.x https://book.cakephp.org/2/ja/models.html ビュー - 2.x https://book.cakephp.org/2/ja/views.html あたりは読んで欲しいところです。ドットインストールの 【旧版】CakePHP2入門 (全32回) https://dotinstall.com/lessons/basic_cakephp もチュートリアルとしてよいと思います。
kuuhaku4262

2019/11/25 23:37

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問