我正在使用php.activerecord,我正在尝试将表链接在一起。我没有使用他们的结构,但 php.activerecord 假设我是,所以它并不总是有效。我正在尝试在已经制作的应用程序上使用它,所以我无法更改数据库。
我从上一个问题中了解到 -与自定义表和键名的模型关联- 我需要尽可能明确地使用primary_key
andforeign_key
字段。
我现在在使用has_many through时遇到问题。我不断得到NULL
,我不知道为什么。
所以,这是一个场景:我有 3 个表,contacts
、contactPrefs
和preferences
。这些表如下
contacts
--------
contactID
name
status
contactPrefs
------------
contactID
prefID
prefValue
preferences
-----------
prefID
name
description
每个contact
都有多个contactPrefs
. 每个contactPrefs
人都有一个preferences
。我试图用has_many
它来让它工作,但事实并非如此。这是我的模型:
Contacts.php
:
<?php
class Contact extends ActiveRecord\Model {
static $primary_key = 'contactID';
static $has_many = array(
array(
'prefs',
'foreign_key' => 'contactid',
'primary_key' => 'contactid',
'class_name' => 'ContactPref'
),
array(
'preferences',
'foreign_key' => 'prefid',
'primary_key' => 'prefid',
'through' => 'prefs',
'class_name' => 'Preference'
)
);
}
ContactPref.php
:
<?php
class ContactPref extends ActiveRecord\Model {
static $table_name = 'contactPrefs';
static $belongs_to = array(
array(
'contact',
'foreign_key' => 'contactid',
'primary_key' => 'contactid'
),
array(
'preference',
'foreign_key' => 'prefid',
'primary_key' => 'prefid'
)
);
}
Preference.php
:
<?php
class Preference extends ActiveRecord\Model {
static $primary_key = 'prefID';
static $has_many = array(
array(
'prefs',
'foreign_key' => 'prefid',
'primary_key' => 'prefid',
'class_name' => 'ContactPref'
)
);
}
根据文档,我现在应该能够执行以下操作:
<?php
var_dump(Contact::find(1234)->preference);
我不能。我明白了NULL
。奇怪的是,我可以这样做:
<?php
var_dump(Contact::find(1234)->prefs[0]->preference);
这工作正常。但是,我不应该能够直接通过对象访问preference
对象吗?我是否误解了文档(在我看来,它们不是最好的)?难道我做错了什么?contact