0

请多多包涵,我还在学习中。

我有4个模型:

class Model_Users extends Model_Table {
    public $table="users";
    function init(){
        parent::init();
        $this->addField('name')->mandatory('Enter Name');
        $this->addField('email')->mandatory('Enter E-Mail');
        $this->addField('phone')->mandatory('Enter Phone');
        $this->addField('password')->type('password')->mandatory('Enter Password');
        $this->addField('is_superadmin')->type('boolean');
        $this->addField('is_employee')->type('boolean');
        $this->addField('is_manager')->type('boolean');

        $this->hasMany('companies');
    }


}

class Model_areas extends Model_Table {
    public $entity_code='areas';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description')->type('text');
        //$this->addField('companies_id')->refModel('Model_companies');

        $this->hasOne('companies','companies_id','name')->mandatory(true);
        $this->hasMany('sites');
    }
}

class Model_areas extends Model_Table {
    public $entity_code='areas';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description')->type('text');
        //$this->addField('companies_id')->refModel('Model_companies');

        $this->hasOne('companies','companies_id','name')->mandatory(true);
        $this->hasMany('sites');
    }
}

class Model_sites extends Model_Table {
    public $entity_code='sites';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description')->type('text');
        $this->addField('qrcode');
        //$this->addField('Company Name','areas_id')->refModel('Model_companies','name');

        $this->hasOne('areas','areas_id','name');
    }
}

我有一个简单的“站点”模型。它正在成功地从“区域”中提取相关的 hasOne 记录。我有两个问题:

1) 如何更改连接区域列的列名?它只是说“区域”,而我希望它是“区域名称”

2)更复杂的一个:我如何grid->addColumn对生成的CRUD(或者它必须是一个网格?)执行类似的操作,将公司名称与该区域相关联areas_id?它都是一对多的关系。公司有多个领域。区域有多个站点。我想将公司名称添加到站点的 CRUD 视图中。

您可以在注释行中看到我为实现这一目标所做的一些小尝试。然后我意识到我错过了一些大事。我应该能够保持这个模型简单并简单地遍历关系..

谢谢您的帮助。

回到这些教程视频。

编辑:好的,我想出的列名。->caption('Blah'). 仍然无法弄清楚遍历:(

4

1 回答 1

0

1)尝试:

$this->hasOne('areas','areas_id','name')->caption('Area Name');

2)稍微简化你的模型,就是这样。我承认 - 我没有对此进行测试,但它应该可以工作:

<?php
class Model_Company extends Model_Table {
    public $table = 'company';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description');
        $this->hasMany('Area');
    }
}

class Model_Area extends Model_Table {
    public $table = 'area';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description');
        $this->hasOne('Company', 'company_id', 'name');
        $this->hasMany('Site');
    }
}

class Model_Site extends Model_Table {
    public $table = 'site';
    function init(){
        parent::init();
        $this->addField('name');
        $this->addField('description');
        $this->hasOne('Area', 'area_id', 'name');

        // join area and company tables
        $j_area = $this->leftJoin('area', 'area_id');
        $j_company = $j_area->leftJoin('company', 'company_id');

        // add fields from joined tables to this model
        $j_area->addField('area_name', 'name');
        $j_company->addField('company_name', 'name');
    }
}

基本思想 - 使用连接。->leftJoin 不会创建连接记录,但 ->join 会创建它们。仅用于报告(网格、crud 等),您可以使用 leftJoin。

PS为自己定义一些编码规则。例如,当您对类名、文件名使用大写、小写、驼峰式等时。否则,在 *NIX 系统上迁移时,您迟早会遇到问题。一个很好的例子是用大写的第一个字母命名所有类名。不要忘记您各自的文件名应该与您的类名完全匹配 - 也是字母大小写。页面类名我喜欢全部小写,因为它们的名字用在 URL 中,然后看起来小写更好。但这只是我:)

多一个。如果您正在开发新项目或正在学习 ATK,请坚持使用最新的开发版本(可在 github 上获得)。自从录制教程以来,有很多事情发生了变化。例如,不推荐使用 $entity_code - 改用 $table。refModel 也已经过时了,我猜等等。如果你想在 ATK 上取得成功,那么你必须定期查看 ATK 源代码以更好地理解它。还有一些有用的评论:)

祝你好运!

于 2013-07-22T10:07:22.143 回答