私は既存のデータベースを使用しています (変更することはできず、そのテーブル名はケーキの慣習が望んでいるものとは異なります)。左結合をいくつか実行したいのですが、適切に実行できません:/
私はすでにテーブルを定義しており、テーブルに主キーとモデルの関係を与えています。
ここに私の問題があります:
テーブル Wysipage には 0 から n wysipage_content
、および 0 から nを指定できますwysipage_menu
。from の要素はwysipage_content
1 つの Wysipage のみに対応します。from の要素はwysipage_menu
、0 または 1 つの Wysipage に対応します。
Wysipages のすべての要素のリストと、それらの最終的なコンテンツとメニューを 1 つの表にまとめて、1 つの要求だけで提供してくれる人に依頼したいと思います。
これが私のテーブル定義です(スキーマ全体を避けています。列があることに注意してくださいwp_id
)wp_name
:
class Wysipage extends AppModel {
var $actsAs = array('Containable');
public $useTable = 'wysipage';
public $primaryKey = 'wp_id';
public $displayField = 'wp_name';
var $hasMany = array(
'un' => array(
'Wysipage_contenu' => array(
'className' => 'Wysipage_contenu',
'foreignKey' => 'wpc_wp_id',
)),
'deux' => array(
'Wysipage_menu' => array(
'className' => 'Wysipage_menu',
'foreignKey' => 'wpm_wp_id',
))
);
class Wysipage_contenu extends AppModel {
var $actsAs = array('Containable');
public $useTable = 'wysipage_contenu';
public $primaryKey = 'wpc_id';
public $displayField = 'wpc_h1';
public $belongsTo = array(
'Wysipage' => array(
'className' => 'Wysipage',
'foreignKey' => 'wp_id'
)
);
class Wysipage_menu extends AppModel {
var $actsAs = array('Containable');
public $useTable = 'wysipage_menu';
public $primaryKey = 'wm_id';
public $displayField = 'wm_lien';
public $belongsTo = array(
'Wysipage' => array(
'className' => 'Wysipage',
'foreignKey' => 'wm_wp_id'
)
);
そして、ここにリクエストを試すための私のコードがあります(しかし失敗しました):
$this->loadModel('Wysipage_contenu');
$this->loadModel('Wysipage_menu');
$this->Wysipage->contain();
$mes_wysipages = $this->Wysipage->find('all', array('joins' => array(
array(
'table' => 'wysipage_contenu',
'alias' => 'wpc',
'type' => 'LEFT',
'conditions'=> array('wpc.wpc_wp_id = Wysipage.wp_id')
),
array(
'table' => 'wysipage_menu',
'alias' => 'wpm',
'type' => 'LEFT',
'conditions'=> array('wpm.wm_wp_id = Wysipage.wp_id')
)
)));
$this->set('wysipages', $mes_wysipages);
$this->render();
私は何を間違えましたか?モデル宣言に問題がありますか? または、間違ったリクエスト タイプを使用していますか? :(
私がしたいリクエストは単純です:
SELECT wp_id, wp_name, wpc_id, wpc_name
FROM wysipage
LEFT JOIN wysipage_contenu ON wysipage.wp_id = wysipage_contenu.wpc_wp_id
これだけ:(
LEFT 結合または RIGHT 結合が必要かどうかさえわかりませんが、とにかく問題は同じままです。このコードでは、同じ行が複数回出現するという悪い答えが得られます:/
ありがとう :/
PS : 英語が下手で申し訳ありません。母国語ではありません。