hasOne字段未在CRUD中添加表单

时间:2015-05-25 13:12:08

标签: php frameworks atk4

我试图在CRUD中显示与表单和网格中的模型不同的字段。据我所知,当我对CRUD使用setModel()方法时,我需要设置Model,第二个值应该是Model中我希望以表单形式显示的字段数组,第三个值应该是我想要显示的字段数组在网格中。

好吧,我的模型有4个hasOne()字段,当我想要其中2个以形式显示时,它们就不存在了。我的代码在这里:

型号:

<?php
class Model_Objekat extends Model_Table {
    public $table = 'objekat';

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

        $this->hasOne('Kategorija',null,'kategorija');
        $this->hasOne('Korisnik',null,'puno_ime');
        $this->hasOne('Mesto',null,'naziv_mesta');
        $this->hasOne('Tip',null,'tip');

        $this->addField('investitor');
        $this->addField('naziv');
        $this->addField('adresa');
        $this->addField('biro');
        $this->addField('datum') -> type('date');
        $this->addField('slika_situacije');
        $this->addField('tehnicki_opis') -> type('text');
        $this->addField('A_omotaca');
        $this->addField('sum_Hts');
        $this->addField('Htb');
        $this->addField('Ht');
        $this->addField('HtPrim');
        $this->addField('V_omotaca');
        $this->addField('faktor_oblika');
        $this->addField('udeo_transparentne_A_procentualno');
        $this->addField('HtPrim_ispunjeno') -> type('boolean');
        $this->addField('Hv');
        $this->addField('korisna_A');
        $this->addField('gh_nd');
        $this->addField('qh_nd_interm');
        $this->addField('projektant');
        $this->addField('Cm');
        $this->addField('Tau');
        $this->addField('ah');
        $this->addField('broj_dana_grejanja_nedeljno');
        $this->addField('broj_sati_grejanja_dnevno');
        $this->addField('hladnjaca') -> type('boolean');
        $this->addField('fh_hr');
        $this->addField('V_grejanog_prostora');
        $this->addField('fotografija_objekta');
        $this->addField('katastarska_parcela');
        $this->addField('izvodjac');
        $this->addField('godina_rekonstrukcije');
        $this->addField('automatska_regulacija') -> type('boolean');
        $this->addField('centralna_regulacija') -> type('boolean');
        $this->addField('lokalna_regulacija') -> type('boolean');
        $this->addField('dnevni_prekid');
        $this->addField('nedeljni_prekid');
        $this->addField('sezonski_prekid');
    }
}

页:

<?php
class page_ing_opstiPodaci extends Page {
    function init() {
        parent::init();

        $tabs = $this->add('Tabs');

        $tab = $tabs -> addTab('Objekti');

        $formFields = array('tip','kategorija','investitor');

        $tab -> add('CRUD') -> setModel('Objekat',
            array('tip','kategorija','investitor','naziv','adresa','biro','projektant',
            'korisnik','datum','katastarska_parcela','izvodjac','godina_rekonstrukcije'),
            array('tip','kategorija','investitor','naziv','adresa','biro','projektant',
            'korisnik','datum','katastarska_parcela','izvodjac','godina_rekonstrukcije'));
    }
}

1 个答案:

答案 0 :(得分:0)

我猜你的错误是参数hasOne,更重要的是您在setModel中使用的字段名称。

function hasOne($model,$our_field=null,$display_field=null,$as_field=null)...

所以,

  • $model是模型或模型本身的类名。
  • $our_field是您当前模型Model_Objekat中的字段名称,默认情况下,相关模型的表名称+&#34; _id&#34;。
  • $display_field是要显示的相关模型的字段名称。默认情况下它不是$ our_field而没有&#34; _id&#34;后缀,但是如果$ our_field不包含_id后缀,那么它将是$ our_field +&#34; _text&#34;后缀。
  • $as_field是相关模型中的字段名称,将用作取消引用字段(包含引用模型的标题字段值)。

创建hasOne字段时,它实际上会创建两个字段。 ID值和其他字段的一个字段作为表达式,其中包含来自引用模型的标题值。

这有点背景,但现在是真正的问题。

真正的问题在于您在setModel中使用的字段名称。正如我上面提到的 - hasOne创建了两个字段,你需要在Grid中使用其中一个(解除引用的标题字段),在Form中使用另一个字段(ID字段本身)。

所以在你的情况下你应该在模型中定义它: $this->hasOne( 'Kategorija', /* model name */ 'kategorija', /* ID field name in this models table, default will be kategorija_id */ 'kat_title',/* name of title field, by default in this case it'll be kategorija_text */ null ); 在CRUD中使用这样的 $crud->setModel('Objekat', array('kategorija'), array('kat_title')); 因为在表单中你必须显示ID字段,但在Grid中你需要显示标题字段。

也许我在这些字段名称中犯了一些错误,但看起来你的问题看起来就是这些问题。

您还可以通过转储进行调试: var_dump(array_keys($model->elements)); 并查看模型字段的所有实际名称。