我正在使用现有的数据库(我无法更改它,并且它的表名不像蛋糕约定想要的那样),我想做一些左连接但不能正确执行:/
我已经定义了我的表,为它们提供了主键和模型中的关系。
这是我的问题:
表 Wysipage 可以有 0 到 nwysipage_content
和 0 到 n wysipage_menu
。一个元素 fromwysipage_content
对应于 1 且只有 1 个 Wysipage。来自的元素wysipage_menu
对应于 0 或 1 个 Wysipage。
我想提出一个请求,他会给我一份来自 Wysipages 的所有元素的列表,以及它们最终的内容和菜单,所有这些都在一个表中,并且只有一个请求。
这是我的表定义(我避免使用整个架构,请注意有一个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
只是这个 :(
我什至不确定我想要左连接还是右连接,但无论如何问题仍然存在,这段代码给了我错误的答案,多次出现相同的行:/
谢谢 :/
PS:对不起我的英语不好,这不是我的母语。