我正在使用现有数据库(我无法更改它,并且它的表名不像蛋糕约定想要的那样),并且我想要做一些左加入但不能正确地做到这一点:/Cakephp:与非常规表的左右连接
我已经定义了我的表,给他们主键和模型中的关系。
这里是我的问题:
表Wysipage可以有0到n wysipage_content
,以及0到n wysipage_menu
。 来自wysipage_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
就在这个:(
我甚至不知道我想要一个LEFT JOIN或右连接,但不管怎么说问题是一样的,这个代码给了我与同系的多次出现不好的答案:/
感谢:/
PS:对不起,我的英语不好,这不是我的母语语言翻译年龄。