我有两张桌子
1. Airline -id(primary), name
2. Form - id(primary), operator, other unwanted fields
我想将Airline.name与Form.operator联系起来。是否可能因为Form.operator不是主键,如果是,请给我查询。
有人可以指导我,在这种情况下,cakephp模型的关系如何
答案 0 :(得分:2)
我建议你不要像在系统中的其他地方那样使用名称Form,但是试试这个(或类似的东西)并阅读http://book.cakephp.org/view/1039/Associations-Linking-Models-Together
在app / models / airline.php中:
<?php
class Airline extends AppModel
{
var $name = 'Airline';
var $hasOne = array(
'Form' => array(
'className' => 'Form',
'foreignKey' => 'operator')
);
// other stuff
// ... //
?>
在app / models / form.php中:
<?php
class Form extends AppModel
{
var $name = 'Form';
var $belongsTo = array(
'Airline' => array(
'className' => 'Airline',
'foreignKey' => 'operator')
)
;
// other stuff
// ... //
?>
答案 1 :(得分:1)
为了建立关系,正如Leo建议的那样,你必须遵循蛋糕惯例。为了避免以后出现一些令人头疼的问题,我建议使用编写得很好的短材料here和here。你会学到例如cakephp可以为你做一些好的外键,名为operator_id
,而不仅仅是operator
(如果运算符不是外键,可能是因为你有数据库设计问题)。
这里提升指的是自动识别一旦在例如中定义的关系。 a $ belongsTo。
答案 2 :(得分:1)
var $hasOne = array(
'airline' => array(
'className' => 'airline',
'foreignKey' => false,
'conditions' => array(
'`form`.`yourfield` = `airline`.`yourfield`'
)
)
}
这应该有效。只需替换你的字段
答案 3 :(得分:0)
select * from `airline`, `form` where `airline.id`=`form.operator`