我试图在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'));
}
}
答案 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));
并查看模型字段的所有实际名称。