0

http://agiletoolkit.org/doc/modeltable/referenceに示されている例を使用して、あるモデルから別のモデルへの参照を手動で作成しようとしています。次のテーブルとモデルを使用しています。

人物表

  • id: 主キー
  • 名前:チャー
  • room_number: 整数
  • 電子メール: 文字

ユーザーテーブル

  • id: 主キー
  • person_id: Person テーブルへの外部キー (id)
  • パスワード: 文字

ATK4.2 クラスは以下のとおりです。

人物モデル

class Model_Person extends Model_Table {
public $entity_code='person';

function init(){
    parent::init();
    $this->addField('name');
    $this->addField('roomnumber');
    $this->addField('email');
}
}

ユーザーモデル

「user」テーブルには、パスワード フィールドが含まれています。

class Model_User extends Model_Table {
public $entity_code='user';

function init(){
    parent::init();

    $field_ref = $this->add('Field_Reference', 'person_id');
    $field_ref->dereferenced_field = 'person_str';
    // add referenced Model
    $m = $this->add('Model_Person');
    $m->addField('name');
    // Link referenced model field name to this model field.
    $field_ref->setModel($m, 'name');


}
}

ただし、Model_Person クラスが間違ったパス Model/Model/Person.php を使用して追加されているというエラーが表示されます。

PathFinder_Exception

Unable to include Model/Model/Person.php

Additional information:

    type: php
    attempted_locations: Array ( [0] => /var/www/html/seqtrack/admin/lib/Model/Model/Person.php [1] => /var/www/html/seqtrack/atk4/lib/Model/Model/Person.php [2] => /var/www/html/seqtrack/admin/../lib/Model/Model/Person.php [3] => /var/www/html/seqtrack/atk4/../atk4-addons/mvc/Model/Model/Person.php [4] => /var/www/html/seqtrack/atk4/../atk4-addons/misc/lib/Model/Model/Person.php ) 

/var/www/html/seqtrack/atk4/lib/BaseException.php:38
Stack trace:
/var/www/html/seqtrack/atk4/lib/BaseException.php   :38     PathFinder_Exception    PathFinder_Exception->collectBasicData(Null, 1, 0)
/var/www/html/seqtrack/atk4/lib/PathFinder.php  :213    PathFinder_Exception    PathFinder_Exception->__construct("Unable to include Model/Model/Person.php")
/var/www/html/seqtrack/atk4/lib/PathFinder.php  :131    PathFinder_Exception    PathFinder_Exception->__construct("php", "Model/Model/Person.php", Array(5))
/var/www/html/seqtrack/atk4/lib/PathFinder.php  :195    test_pathfinder PathFinder->locate("php", "Model/Model/Person.php", "path")
/var/www/html/seqtrack/atk4/lib/AbstractObject.php  :159    test_pathfinder PathFinder->loadClass("Model_Model_Person")
/var/www/html/seqtrack/atk4/lib/Field/Reference.php :89     test_mgr_tabs_view_htmlelement_crud_model_user_person_id    Field_Reference->add("Model_Model_Person")
/   :   test_mgr_tabs_view_htmlelement_crud_model_user_person_id    Field_Reference->calculateSubQuery(Object(Model_User), Object(DB_dsql_mysql), Object(Field_Expression))
/var/www/html/seqtrack/atk4/lib/Field/Expression.php    :44         Loggercall_user_func(Array(2), Object(Model_User), Object(DB_dsql_mysql), Object(Field_Expression))
/var/www/html/seqtrack/atk4/lib/Model/Table.php :169    test_mgr_tabs_view_htmlelement_crud_model_user_person_str   Field_Expression->updateSelectQuery(Object(DB_dsql_mysql))
/var/www/html/seqtrack/atk4/lib/Model/Table.php :327    test_mgr_tabs_view_htmlelement_crud_model_user  Model_User->selectQuery()
/var/www/html/seqtrack/atk4/lib/CompleteLister.php  :104    test_mgr_tabs_view_htmlelement_crud_model_user  Model_User->rewind()
/var/www/html/seqtrack/atk4/lib/Grid/Basic.php  :175    test_mgr_tabs_view_htmlelement_crud_grid    Grid->renderRows()
/var/www/html/seqtrack/atk4/lib/CompleteLister.php  :118    test_mgr_tabs_view_htmlelement_crud_grid    Grid->renderRows()
/var/www/html/seqtrack/atk4/lib/Grid/Advanced.php   :152    test_mgr_tabs_view_htmlelement_crud_grid    Grid->render()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :214    test_mgr_tabs_view_htmlelement_crud_grid    Grid->render()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :205    test_mgr_tabs_view_htmlelement_crud_grid    Grid->recursiveRender()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :205    test_mgr_tabs_view_htmlelement_crud CRUD->recursiveRender()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :205    test_mgr_tabs_view_htmlelement  View_HtmlElement->recursiveRender()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :205    test_mgr_tabs   Tabs->recursiveRender()
/var/www/html/seqtrack/atk4/lib/AbstractView.php    :205    test_mgr    page_mgr->recursiveRender()
/var/www/html/seqtrack/atk4/lib/ApiWeb.php  :236    test    AdminFrontend->recursiveRender()
/var/www/html/seqtrack/atk4/lib/ApiFrontend.php :123    test    AdminFrontend->execute()
/var/www/html/seqtrack/atk4/lib/ApiWeb.php  :226    test    AdminFrontend->execute()
/var/www/html/seqtrack/admin/index.php  :8  test    AdminFrontend->main()

同様の問題は、ATK DVD のサンプル Web ページにも見られます。

http://example.agiletoolkit.org/examples/dvdrental/

PathFinder_Exception

Unable to include Model/Model/Customer.php

Additional information:

type: php
attempted_locations: Array ( [0] => /www/agiletoolkit.org/example/examples/dvdrental/lib/Model/Model/Customer.php [1] => /www/agiletoolkit.org/example/atk4/lib/Model/Model/Customer.php [2] => /www/agiletoolkit.org/example/atk4/../atk4-addons/mvc/Model/Model/Customer.php [3] => /www/agiletoolkit.org/example/atk4/../atk4-addons/misc/lib/Model/Model/Customer.php ) 

/www/agiletoolkit.org/example/atk4/lib/BaseException.php:38
Stack trace:
/www/agiletoolkit.org/example/atk4/lib/BaseException.php    :38     PathFinder_Exception    PathFinder_Exception->collectBasicData(Null, 1, 0)
/www/agiletoolkit.org/example/atk4/lib/PathFinder.php   :209    PathFinder_Exception    PathFinder_Exception->__construct("Unable to include Model/Model/Customer.php")
/www/agiletoolkit.org/example/atk4/lib/PathFinder.php   :134    PathFinder_Exception    PathFinder_Exception->__construct("php", "Model/Model/Customer.php", Array(4))
/www/agiletoolkit.org/example/atk4/lib/PathFinder.php   :195    Frontend_pathfinder PathFinder->locate("php", "Model/Model/Customer.php", "path")
/www/agiletoolkit.org/example/atk4/lib/AbstractObject.php   :158    Frontend_pathfinder PathFinder->loadClass("Model_Model_Customer")
/www/agiletoolkit.org/example/atk4/lib/AbstractController.php   :26     Frontend    Frontend->add("Model_Model_Customer")
/www/agiletoolkit.org/example/examples/dvdrental/lib/RentalAuth.php :5  Frontend_rentalauth RentalAuth->setModel("Model_Customer")
/www/agiletoolkit.org/example/atk4/lib/AbstractObject.php   :181    Frontend_rentalauth RentalAuth->init()
/www/agiletoolkit.org/example/examples/dvdrental/lib/Frontend.php   :21     Frontend    Frontend->add("RentalAuth")
/www/agiletoolkit.org/example/atk4/lib/ApiCLI.php   :48     Frontend    Frontend->init()
/www/agiletoolkit.org/example/atk4/lib/ApiWeb.php   :38     Frontend    Frontend->__construct(Null)
/www/agiletoolkit.org/example/examples/dvdrental/index.php  :3  Frontend    Frontend->__construct()

乾杯。


アップデート

コード フラグメントは User クラスに入る必要があるため、次のようになります。

class Model_User extends Model_Table {
public $entity_code='user';

function init(){
    parent::init();

    $this->hasOne('Person');

    $field_ref = $this->getField('person')->rename('person_str');
    $this->getField('person_id')->dereferenced_field='person_str';

    // add referenced Model
    $m = $this->add('Model_Person');
    $m->addField('name');

    // Link referenced model field name to this model field.
    $field_ref->setModel($m, 'name');

}
}

生成される SQL は次のとおりです。

select id, person_id,(select namefrom personwhere user. person_id= person. id) person_strfromuser


ただし、以下のクラスも同じ SQL ステートメントを生成します。

class Model_User extends Model_Table {
public $entity_code='user';

function init(){
    parent::init();

    $this->hasOne('Person');

    $this->getField('person')->rename('person_str');

}
}

そのため、関数と残りのコードの必要性がよくわかりません: $this->getField('person_id')->dereferenced_field='person_str';

    // add referenced Model
    $m = $this->add('Model_Person');
    $m->addField('name');

    // Link referenced model field name to this model field.
    $field_ref->setModel($m, 'name');

これについてさらに説明をいただければ幸いです。ありがとうございます。

4

1 に答える 1

0

あなたの人物モデルの中でこれを試してください

$this->hasOne('Person');
$this->getField('person')->rename('person_str');
$this->getField('person_id')->dereferenced_field='person_str';

そうしないと、「setmodel」は事前に作成されたオブジェクトで機能しません。

于 2012-05-01T10:38:43.707 に答える