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 レコードを「area」から正常にプルしています。2 つの質問があります。

1) 結合領域列の列名を変更するにはどうすればよいですか? 「エリア」とだけ書かれていますが、「エリア名」にしたいのですが

grid->addColumn2) そして、より複雑なもの:の領域にリンクされた会社名を取得する、結果の CRUD (またはグリッドである必要があるでしょうか?) に対して、どのように実行できareas_idますか? そのすべては、1 対多の関係です。会社には複数の領域があります。Areas には複数のサイトがあります。サイトの CRUD ビューに会社名を追加したい。

コメント行で、これを達成するための私の小さな試みのいくつかを見ることができます。それから、私は何か大きなものを失っていることに気づきました。このモデルをシンプルに保ち、単純に関係をたどることができるはずです..

ご協力ありがとうございました。

これらのチュートリアル ビデオに戻ります。

編集:わかりました列名をOKします。->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 はそれらを作成します。レポート(グリッド、クラッドなど)のためだけに、leftJoinで問題ありません。

PS 何らかのコーディング ルールを自分で定義します。たとえば、クラス名、ファイル名に大文字、小文字、キャメルケースなどを使用する場合。そうしないと、遅かれ早かれ *NIX システムに移行するときに問題が発生します。良い例は、すべてのクラス名の最初の文字を大文字にすることです。それぞれのファイル名がクラス名と正確に一致する必要があることを忘れないでください。大文字と小文字も区別してください。ページのクラス名はすべて小文字で名前を付けるのが好きです。なぜなら、その名前は URL で使用され、小文字の方が見栄えがするからです。しかし、それは私だけです:)

もう1つ。新しいプロジェクトに取り組んでいる場合、または ATK を学んでいる場合は、最新の開発バージョン (github で入手可能) を使用してください。チュートリアルの記録以来、かなり多くのことが変更されています。たとえば、$entity_code は非推奨です。代わりに $table を使用してください。refModel も時代遅れだと思います。ATK で成功したい場合は、ATK のソース コードを定期的に調べて理解を深める必要があります。また、いくつかの有用なコメントがあります:)

幸運を!

于 2013-07-22T10:07:22.143 に答える