首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PathFinder_Exception无法包含模型/模型/使用setModel

PathFinder_Exception无法包含模型/模型/使用setModel
EN

Stack Overflow用户
提问于 2012-05-01 01:19:58
回答 1查看 243关注 0票数 0

我试图使用http://agiletoolkit.org/doc/modeltable/reference中给出的示例手动创建一个从一个模型到另一个模型的引用。我使用以下表格和模型:

人事表

char

  • room_number:
  • id:主键
  • 名称:
  • int
  • 电子邮件: char

用户表

个人主key

  • person_id:外键表(id)

  • password: char

ATK4.2级课程如下:

人模型

代码语言:javascript
运行
复制
class Model_Person extends Model_Table {
public $entity_code='person';

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

用户模型

“user”表包含密码字段。

代码语言:javascript
运行
复制
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/Model/Person.php添加了Model_Person类

代码语言:javascript
运行
复制
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示例网页上看到:

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

代码语言:javascript
运行
复制
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类,所以现在如下所示:

代码语言:javascript
运行
复制
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是:

选择idperson_id,(从person选择name .person_id= person.id )从user选择person_str

但是,下面的类也生成相同的SQL状态。

代码语言:javascript
运行
复制
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';

代码语言:javascript
运行
复制
    // 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');

我希望我们能得到进一步的解释,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-01 10:38:43

在你的人形模型里试试这个

代码语言:javascript
运行
复制
$this->hasOne('Person');
$this->getField('person')->rename('person_str');
$this->getField('person_id')->dereferenced_field='person_str';

否则,"setmodel“将无法处理预先创建的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10392457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档