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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Q&A

解決済

1回答

1252閲覧

CakePHP3 複数の外部制約キーを使用したSELECTは可能?

teaful

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

0グッド

0クリップ

投稿2020/03/17 01:15

編集2020/03/17 01:58

前提・実現したいこと

PHP(CakePHP3)にて複数の外部制約キーを使用してselectしたいです。

テーブルAsはカラムidを持ちます。
テーブルBsのカラムb1、b2がそれぞれAs.idを外部制約キーとしています。
(b1、b2のカラム名は _idという形をとっていません。)
この構造でのselectはassociationに頼るべきではないものでしょうか?

テーブルAs id, ・・・ テーブルBs id, b1(外部キーAs.id), b2(外部キーAs.id), ・・・ 

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

InvalidArgumentException : The association is not defined on Bs. ※contain使用時↓ SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Bs.b1' in 'on clause'

該当のソースコード

php

1BsTable.php 2 $this->belongsTo('B1s', [ 3 'className' => 'As', 4 'foreignKey' => 'b1', 5 'joinType' => 'LEFT' 6 ]); 7 $this->belongsTo('B2s', [ 8 'className' => 'As', 9 'foreignKey' => 'b2', 10 'joinType' => 'LEFT' 11 ]);

php

1BsController.php 2 ->leftJoinWith(['B1s', function (Query $q) { 3 return $q 4 ->enableAutoFields(true); 5 } 6 ]) 7 ->leftJoinWith(['B2s' , function (Query $q) { 8 return $q 9 ->enableAutoFields(true); 10 } 11 ])

試したこと

以下の記載があるページを参考にさせて頂きました。
・(CakePHP2.x) 1つのテーブルで複数の外部キーを使う
・Cakephp : 複数の外部キーの設定

以下を見つけたので参考に進めています。
https://teratail.com/questions/69580?link=qa_related_pc_sidebar

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

nojimage

2020/03/17 05:43

説明、エラーメッセージとBsController.phpの内容があってないようですが、containを使用した場合のコードを提示してください。
nojimage

2020/03/17 05:47

エラーメッセージは `Bs` のリレーションが定義されていないよのエラーです。提示されたコードにはそもそも Bs のリレーションが定義されていませんからエラーになるのは正しい動作です。
teaful

2020/03/26 02:36

ありがとうございます。遅くなり申し訳ありません。 結果、外部キーの設定を誤っていました。 テーブルBsのカラムb1、b2を 任意名_idで命名していたのですが 色々試している際に「_id」で定義したら駄目なのか?と_idを外そうとしたところ _id付きと無しが混在してしまい、他を修正した後もエラーが出続ける状態となってしまいました。 最終的には各参考ページ通りに外部キーを正確に設定すれば問題ありませんでした。 お手数をお掛けし失礼しました。エラーメッセージの読み取りから始めます。。
guest

回答1

0

自己解決

「試したこと」の参考ページの内容を読み直し、再実施することで解決しました。
外部制約キーを持つカラム名称は「テーブルが存在しない単数形単語_id」としました。
ありがとうございました。

投稿2020/03/27 02:04

teaful

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問