3

私はphp.activerecordを使用しており、2 つのテーブルをリンクしようとしています。

と がcontactsありcontactCompanyLinksます。各連絡先には、リンク テーブルに 1 つ以上の行を含めることができます。テーブル内のフィールド名は適切な規則に従っていませんが、同じテーブルを使用している別のアプリを壊す可能性があるため、変更できません。

の主キーは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! contactcompanylinkまたはContactCompanyLinkまたはのような他のプロパティを試した場合ContactCompanyLinks、「未定義のプロパティ」エラーが発生しました。

var_dump(Contact::find(1234)うまく動作します。テーブルのフィールドが表示されcontactsます。

2 つのテーブルをリンクする方法を php.activerecord に伝えようとしたときに、仮定をやめて私の話を聞くようにするにはどうすればよいですか?

4

1 に答える 1

3

未定義のプロパティ エラーは、おそらくID. phpactiverecordすべてのプロパティを小文字にすることを強制します。

これは、すべてのフィールドを小文字にする必要があることを意味します。EG、キーは と である必要がinspectoridありcontactidます。

これは、列のみに当てはまるわけではありません。クラス名 (php クラス) は、明らかに実際のケースである必要があり、テーブル名もそうである必要があります。

その仮定の問題を回避するために、接続のすべての要素を常に明示的に定義します。これは、両方の接続にすべての要素があることを意味します。

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

にも同じフィールドが必要ですhas_many。のプライマリbelongs_toは OTHER テーブルの ID であり、外部キーはこのテーブルのキーです (キーと言うときは、列名を意味します)。外部キーに属するのは他のテーブルのキーであり、主キーはこのテーブルのキーです。

また、名前空間の二重スラッシュにも注意してください。

于 2012-12-14T07:54:26.360 に答える