3

我正在使用php.activerecord,并且正在尝试链接两个表。

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

的主键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!如果我尝试了其他属性,如contactcompanylinkorContactCompanyLinkContactCompanyLinks,我会收到“未定义属性”错误。

var_dump(Contact::find(1234)工作得很好。它向我显示了contacts表格中的字段。

当我试图告诉它如何将 2 个表链接在一起时,如何告诉 php.activerecord 停止假设事情并听我说?

4

1 回答 1

3

未定义的属性错误可能来自您的ID. phpactiverecord假定,不强制所有属性为小写。

这意味着所有字段都应该被称为小写。例如,您的密钥应该是inspectoridand contactid

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

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

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

但 . 也需要相同的字段has_many。中的primarybelongs_to是OTHER表的id,外键是这个表的key(我说的key是指列名)。因为属于外键的是另一张表中的键,主键是本表中的键。

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

于 2012-12-14T07:54:26.360 回答