模型与自定义表和键名的关联

时间:2012-12-13 21:28:54

标签: php phpactiverecord

我正在使用php.activerecord,我正在尝试关联两个表。

我有contactscontactCompanyLinks。每个联系人都可以在链接表中包含一行或多行。表中的字段名称不遵循任何合理的约定,但我无法更改它,因为它会破坏使用同一个表的另一个应用程序。

contacts的主键称为contactIDcontactCompanyLinks中的外键称为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!如果我尝试了contactcompanylinkContactCompanyLinkContactCompanyLinks等其他属性,则会出现“未定义属性”错误。

var_dump(Contact::find(1234)效果很好。它显示了contacts表中的字段。

当我试图告诉它如何将2个表连接在一起时,如何告诉php.activerecord停止假设并听取我的意见?

1 个答案:

答案 0 :(得分:2)

未定义的属性错误可能来自您的IDphpactiverecord假设,不,FORCES所有属性都是小写的。

这意味着所有字段应该被称为小写。 E.G.,您的密钥应为inspectoridcontactid

不仅仅是列的情况。类名(php类)显然应该是它们实际的情况,表名也是如此。

我总是明确定义连接的所有元素以避免该假设问题。这意味着两个连接都将包含所有元素:

static $belongs_to = array(
  array('somename',
        'foreign_key'=>'someid',
        'primary_key'=>'id', 
        'class_name'=>'Models\\NameSpace\\YourModelClassName')
);

has_many也需要相同的字段。 belongs_to中的主要是OTHER表的id,外键是此表中的键(当我说密钥时,我指的是列名)。对于属于外键的是另一个表中的键,而主键是该表中的键。

另外,请注意命名空间的双斜杠。