4

私は現在、DataMapper ORM for CodeIgniter を使用して Web サイトをモデル化しています。現時点ではusers、ID を含むすべての標準ユーザー情報を含むform_dataテーブルと、独自の ID と、テーブルの列にcreated_byリンクするフィールドが呼び出されるテーブルがあります。簡単に言うと、users-form_data は 1 対多の関係です。私の DataMapper モデルは次のようになります。idusers

ユーザー

class user extends DataMapper {

    var $has_many = array(
        'form_data_created_by' => array(
            'class' => 'form_data',
            'other_field' => 'created_by'
        )
    );
}

...そしてもちろん、ここでは簡潔にするために編集しました

そして、私の form_data モデルは次のようになります:

class form_data extends DataMapper {
    var $table = 'form_data';

    var $has_one = array(
        'form_type', 
        'created_by' => array(
            'class' => 'user',
            'other_field' => 'form_data_created_by'
        )
    );
}

これが問題です。このコードを実行すると:

$form_type = new form_type();
$form_data = $form_type->where('app_id', $app_id)->get()->form_data->get()->all_to_array();

次のようなエラーがスローされます。

Severity: Warning
Message:  Invalid argument supplied for foreach()
Filename: datamapper/array.php
Line Number: 53

$form_data オブジェクトの JSON をエコーアウトすると、次のようになります。

{"id":1,"form_type_id":"3","create_date":"1306241597","created_by":[],"status":"a"}

created_by空の配列がどのように機能するかに注意してください。私のテーブルの列は間違いなく と呼ばれていますcreated_by。奇妙なことに、この列を次のようuser_idに変更し、form_dataクラスを次のように変更すると、次のようになります。

var $has_one = array('form_type', 'user');

...そして、userクラスを次のように変更します。

var $has_many = array('form_data') //among others

すべてが完璧に機能し、 の適切な値が得られましたuser_id

それで、誰かが私を正しい方向に向けることができますか?このページをガイドとして使用してきました: http://datamapper.wanwizard.eu/pages/advancedrelations.html

ありがとう

4

2 に答える 2

0

同じエラーが発生していました。parent::__construct()コンストラクターの不足が原因でした。

于 2013-04-29T17:42:58.780 に答える
0

「join_table」=>「user と form_data の両方がある場所」に言及してみてください。そうしないと、datamapper は form_datas_users という名前の別のテーブルでこの関係を探します

テーブル名にアンダースコアを使用しないようにしてください。データマッパーは非常に多くの場所でアンダースコアを使用して、テーブルの関係を内部的に識別します

于 2011-06-23T14:24:52.973 に答える