質問編集履歴

2 変更

nanamin

nanamin score 26

2018/02/18 23:21  投稿

cakephp3で他テーブルと結合したり、条件を設定したりする方法
cakephp3で結合後、他テーブルのカラムの条件で取得したい
### 前提・実現したいこと
他テーブルと結合して、取得条件を設定したい。
他テーブルと結合して、他テーブルのカラムで取得条件を設定したい。
公式ドキュメントを見ているのですが、containとinnserjoinの使い方がいまいちよくわかっていません。
### テーブル情報
Users
|id|name|password|role|
|:--|:--:|--:|
Articles
|id|user_id|color_id|title|body|created|modified|
|:--|:--:|--:|
Colors
|id|name|color1|color2|color3|created|modified|
|:--|:--:|--:|
### 該当のソースコード
```PHP
//ArticlesController.php
//一覧取得
//userのロール条件で取得
$articles = $this->Articles->find('all')->contain(['users','colors'])->where(['role' => 1]);
$this->set('articles', $articles);
$articles = $this->Articles->find('all',contain =>['users','colors']);  
$this->set('articles', $articles);  
debug($articles);  
 
//userのロール条件で取得  
$articles = $this->Articles->find('all',contain =>['users','colors'])->where(['role' => 1]);  
$this->set('articles', $articles);  
debug($articles);  
```
これではだめなのでしょうか。例えば他テーブルに同一のカラム名(ここではusers.nameとcolors.nameがある)の場合、どうオブジェクトを呼び出してしていったらよいのでしょうか。
これをすると、Error: Call to undefined method App\Controller\ArticlesController::where() と出ます。
なぜwhereが使えなくなってしまったのでしょうか。
  • CakePHP

    2922 questions

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

1 追記

nanamin

nanamin score 26

2018/02/18 22:49  投稿

cakephp3で他テーブルと結合したり、条件を設定したりする方法
### 前提・実現したいこと
他テーブルと結合して、取得条件を設定したい。
公式ドキュメントを見ているのですが、containとinnserjoinの使い方がいまいちよくわかっていません。
### テーブル情報
Users
|id|name|password|role|
|:--|:--:|--:|
Articles
|id|user_id|color_id|title|body|created|modified|
|:--|:--:|--:|
Colors
|id|name|color1|color2|color3|created|modified|
|:--|:--:|--:|
### 該当のソースコード
```PHP
//ArticlesController.php
//一覧取得
$articles = $this->Articles->find('all',contain =>['users','colors']);
$this->set('articles', $articles);
debug($articles);
//userのロール条件で取得
$this->Articles->find('all',contain =>['users','colors'])->where(['role' => 1]);
$articles = $this->Articles->find('all',contain =>['users','colors'])->where(['role' => 1]);
$this->set('articles', $articles);
debug($articles);
```
これではだめなのでしょうか。例えば他テーブルに同一のカラム名(ここではusers.nameとcolors.nameがある)の場合、どうオブジェクトを呼び出してしていったらよいのでしょうか。
  • CakePHP

    2922 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る