Я пытаюсь показать различные поля из модели в форме и сетки в CRUD. Как я понял, когда я использую метод setModel () для CRUD, мне нужно установить 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'));
}
}
Я думаю, что ваша ошибка с параметрами hasOne
и, что более важно, с именами полей, которые вы используете в setModel.
function hasOne($model,$our_field=null,$display_field=null,$as_field=null)...
Так,
$model
является именем класса модели или самой модели.$our_field
Имя поля в вашей текущей модели Model_Objekat
по умолчанию имя таблицы связанной модели + «_id».$display_field
это имя поля из связанной модели, которое нужно показать. По умолчанию это будет $ our_field без суффикса «_id», но если $ our_field не содержит суффикса _id, то это будет суффикс $ our_field + «_text».$as_field
является именем поля в связанной модели, которое будет использоваться как разыменованное поле (содержит значение поля заголовка ссылочной модели).Когда вы создаете поле hasOne, оно фактически создает два поля. Одно поле для значения идентификатора и другое поле в качестве выражения, которое содержит значение заголовка из ссылочной модели.
Это немного предыстории, но и теперь к реальной проблеме.
Реальная проблема связана с именами полей, которые вы используете в setModel. Как я упоминал выше, hasOne создает два поля, и вам нужно использовать одно из них в Grid (поле заголовка с разыменовкой), а другое — в форме (само поле 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'));
потому что в форме вы должны показать поле идентификатора, а в сетке — поле заголовка.
Возможно, я допустил некоторую ошибку в этих именах полей, но похоже, что ваша проблема связана с этими строками.
Вы также можете отладить, сбросив:
var_dump(array_keys($model->elements));
и увидеть все фактические имена полей моделей.
Других решений пока нет …