【发布时间】:2012-12-13 21:28:53
【问题描述】:
我正在使用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 停止假设事情并听我说?
【问题讨论】:
-
你是说当你
var_dumpfind结果时它工作得很好。当您将该结果存储在一个变量中并运行contactcompanylinks函数时会发生什么?我认为 PHP 的工作方式不会改变任何事情,但我遇到了更奇怪的东西。 -
@Jelmer:这是个好主意,但它不会改变任何东西。是的,
::find本身工作正常,但只返回来自contacts的行。 -
当您使用要绑定的模型的
foreign_key扩展定义belongs_to的数组时会发生什么?我从未使用过 ActiveRecord,但我知道在 CakePHP 中您可以定义foreign_key。它看起来像相同的结构。你试过吗?在这里,我看到他们做类似的事情。 phpactiverecord.org/docs/ActiveRecord/Model -
@Jelmer:不管我把
foreign_key放在哪里,它都不起作用。我尝试了has_many和belongs_to。 =( -
我确定您已经仔细检查了这些内容,但是您愿意发布您正在使用的数据库数据吗?包括表名、列名和您正在测试的记录。我想知道,当您简单地运行
Contact::find('all');时会得到什么?你有什么可能看起来正确的吗? (Ps. 只是想帮助头脑风暴)。我想你已经尝试了很多:)
标签: php phpactiverecord