0

CRUDとhasOne()に問題があり、「追加」フォームで$display_fieldが無視されることがわかりました。参照されるモデルに「名前」フィールドがある場合、CRUDの「追加」フォームのドロップダウンメニューに正しく入力されます。ただし、hasOne()モデルが$ display_fieldパラメーターを使用する場合、Addフォームで指定されたフィールドが表示されると思いますが、そうではありません。$ displayで指定されたフィールドではなく、参照されたモデルの「name」フィールドまたは「id」のみが表示されます。ただし、エントリが追加された後、正しい$display_fieldを使用してエントリが表示されます。したがって、問題は追加操作のどこかにあります。

例えば:

著者

class Model_Author extends Model_Table {

public $table='author';

function init(){
  parent::init();
  $this->addField('long_name');
  $this->addField('DOB');

  }
}

class Model_Book extends Model_Table {

public $table='book';

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

 $this->addField('title');
 $this->hasOne('Author', 'author_id', 'long_name');
 }

}

CRUDページ。

class page_manager extends Page {

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

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

$crud=$tabs->addTab('Book')->add('CRUD');
   } 
 }

[追加]ボタンを選択すると、[作成者]フィールドに作成者テーブルの作成者のID番号が表示されます。ただし、Bookエントリを追加した後、正しいフィールド(つまり、long_name)を使用して既存のエントリを表示します。

乾杯

4

1 に答える 1

0

私は実際に同じ動作を経験し、表示フィールドであるhasOne()の3番目の引数がモデル$title_fieldをオーバーライドすることを期待することに同意します。

原因を特定し、改善する方法を見つけました。ファイルatk4/lib / Field / Reference.phpを開き、関数getModel()に次のように表示フィールドを設定する行を追加します。

  function getModel(){
        if(!$this->model)$this->model=$this->add($this->model_name);
        if($this->display_field) $this->model->title_field=$this->display_field;
        return $this->model;
    }

ここでは、期待どおりに機能しています。つまり、hasOne()がCRUDのADD形式で表示するフィールドを決定します。ただし、このdisplay_fieldを追加するために、副作用や他の場所を監視することはできません。

于 2012-05-10T07:46:01.340 に答える