Поле hasOne не отображается в форме добавления из CRUD

Я пытаюсь показать различные поля из модели в форме и сетки в 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'));
}
}

0

Решение

Я думаю, что ваша ошибка с параметрами 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));

и увидеть все фактические имена полей моделей.

0

Другие решения

Других решений пока нет …