私はphp.activerecordを使用しており、テーブルをリンクしようとしています。私はそれらの構造を使用していませんが、php.activerecord は私が使用していると想定しているため、常に機能するとは限りません。既に作ったアプリで使おうとしているので、データベースを変更できません。
以前の質問 -カスタム テーブルおよびキー名とのモデルの関連付けprimary_key
- から、 フィールドとフィールドをできるだけ明示する必要があることを学びましたforeign_key
。
has_many を介して使用する際に問題が発生しています。を取得し続けてNULL
いますが、その理由がわかりません。
ここにシナリオがあります: contacts
、contactPrefs
、およびの 3 つのテーブルがありpreferences
ます。それらのテーブルは次のとおりです
contacts
--------
contactID
name
status
contactPrefs
------------
contactID
prefID
prefValue
preferences
-----------
prefID
name
description
それぞれcontact
に複数ありcontactPrefs
ます。それぞれcontactPrefs
に 1 つあり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'
)
);
}
docsによると、次のことができるようになりました。
<?php
var_dump(Contact::find(1234)->preference);
私はできません。私は得るNULL
。奇妙なことに、私はこれを行うことができます:
<?php
var_dump(Contact::find(1234)->prefs[0]->preference);
それは正しく動作します。しかし、オブジェクトを介してpreference
オブジェクトに直接アクセスできるべきではありませんcontact
か? ドキュメントを誤解していますか (私の意見では、それらは最高ではありません)。私は何か間違ったことをしていますか?