gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:34 25 4
gpt4 key购买 nike

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

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

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 表中的字段。

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

最佳答案

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

这意味着所有字段 都应称为小写。例如,您的 key 应该是 inspectoridcontactid

并不是只有列是这种情况。类名(php 类)显然应该是它们实际的大小写,表名也应该是这样。

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

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

has_many 也需要相同的字段。 belongs_to 中的primary 是OTHER 表的id,外键是这个表中的键(当我说键时,我指的是列名)。对于属于外键的是其他表中的键,而主键是本表中的键。

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

关于php - 与自定义表和键名称的模型关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com