我正在使用php.activerecord,我正在尝试关联两个表。
我有contacts
和contactCompanyLinks
。每个联系人都可以在链接表中包含一行或多行。表中的字段名称不遵循任何合理的约定,但我无法更改它,因为它会破坏使用同一个表的另一个应用程序。
contacts
的主键称为contactID
,contactCompanyLinks
中的外键称为inspectorID
。
php.activerecord做了太多的假设,我无法弄清楚如何将它连接在一起。
以下是我的模特:
Contact.php
:
<?php
class Contact extends ActiveRecord\Model {
static $primary_key = 'contactID';
static $has_many = array(
array(
'contactCompanyLinks',
'class_name' => 'ContactCompanyLink',
'foreign_key' => 'inspectorID'
)
);
}
ContactCompanyLink.php
:
<?php
class ContactCompanyLink extends ActiveRecord\Model {
static $table_name = 'contactCompanyLinks';
static $belongs_to = array(
array('contact')
);
}
这看起来是正确的,但是当我试图获得一排时,它不起作用。我做了以下事情:
<?php
var_dump(Contact::find(1234)->contactcompanylinks);
我打印到屏幕上的所有内容都是NULL
!如果我尝试了contactcompanylink
或ContactCompanyLink
或ContactCompanyLinks
等其他属性,则会出现“未定义属性”错误。
var_dump(Contact::find(1234)
效果很好。它显示了contacts
表中的字段。
当我试图告诉它如何将2个表连接在一起时,如何告诉php.activerecord停止假设并听取我的意见?
答案 0 :(得分:2)
未定义的属性错误可能来自您的ID
。 phpactiverecord
假设,不,FORCES所有属性都是小写的。
这意味着所有字段应该被称为小写。 E.G.,您的密钥应为inspectorid
和contactid
。
不仅仅是列的情况。类名(php类)显然应该是它们实际的情况,表名也是如此。
我总是明确定义连接的所有元素以避免该假设问题。这意味着两个连接都将包含所有元素:
static $belongs_to = array(
array('somename',
'foreign_key'=>'someid',
'primary_key'=>'id',
'class_name'=>'Models\\NameSpace\\YourModelClassName')
);
但has_many
也需要相同的字段。 belongs_to
中的主要是OTHER表的id,外键是此表中的键(当我说密钥时,我指的是列名)。对于属于外键的是另一个表中的键,而主键是该表中的键。
另外,请注意命名空间的双斜杠。