我发现CRUD和hasOne()的问题,其中$ display_field在“add”表单中被忽略。如果引用的模型具有“名称”字段,则会正确填充CRUD的“添加”表单中的下拉菜单。但是,如果hasOne()模型使用$ display_field参数,我希望Add表单显示指定的字段,但它不会。它只显示引用模型的“名称”字段或“id”,而不是$ display指定的字段。但是,添加条目后,将使用正确的$ display_field显示条目。所以问题出现在Add操作中。
例如:
作者
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)显示现有条目。
干杯
答案 0 :(得分:0)
我确实经历过相同的行为并且同意期望作为显示字段的hasOne()的第三个参数应该覆盖模型$ 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。