0

私はKohana 3.3 ORMから始めて、既存の内部プロジェクトに適用しようとしています。

プロジェクトは使用中のため、スキーマの名前を変更できません。現在のスキーマ定義は次のとおりです。

Table: utente
idUtente VARCHAR PK
nome VARCHAR
// other fields

Table: sessione
idSessione SERIAL PK
idUtente VARCHAR (FK to utente.idUtente)
// other fields

Table: ruolo
idRuolo SERIAL PK
nome VARCHAR
//other fields

Table: ruoloutente
idRuolo PK (FK to ruolo.idRuolo)
idUtente PK (FK to utente.idUtente)
scadenza DATETIME
// other fields

ここで、カスタム テーブル名とカスタム主キー名をモデルに定義し、ORM::factory('Utente', 'Marco'); を使用する場合 (または他のモデル)すべてがうまくいっています。

class Model_Utente extends ORM {
protected $_table_name ='utente';
protected $_primary_key ='idUtente';
protected $_has_many =
    array(
        'ruoli' => array(
            'model' => 'Ruolo',
            'far_key' => 'idRuolo',
            'foreign_key' => 'idUtente',
            'through' => 'ruoloutente',
        ),
        'sessioni' => array(
            'model' => 'Sessione',
            'far_key' => 'idSessione',
            'foreign_key' => 'idUtente',
        ),
    );
// class logic here
}

class Model_Ruolo extends ORM {
protected $_table_name ='ruolo';
protected $_primary_key ='idRuolo';
protected $_has_many =
    array(
        'utenti' => array(
            'model' => 'Utente',
            'far_key' => 'idUtente',
            'foreign_key' => 'idRuolo',
            'through' => 'ruoloutente',
        ),
    );
// class logic here
}

class Model_Sessione extends ORM {
protected $_table_name ='sessione';
protected $_primary_key ='idSessione';
protected $_belongs_to =
    array(
        'utente' => array(
            'model' => 'Utente',
            'far_key' => 'idUtente',
            'foreign_key' => 'idUtente',
        ),
    );
// class logic here
}

Utente のインスタンスから実行します

$this->ruoli->find_all()
$this->sessioni->find_all()
しかし、私は両方で空のモデルを取得します.生成されたクエリは両方の結果で正しく、SQLで直接実行されたクエリはruoliで4つの結果を返し、sessioniで2つの結果を返します..

4

1 に答える 1

0

解決策を見つけました

私の問題は、find()メソッドとfind_all()メソッドも、結果を返すだけでなく、クエリ結果を呼び出し元オブジェクトに永続化すると想定していたことです。みんなに感謝します

于 2013-02-27T16:19:41.447 に答える