在SilverStripe ModelAdmin中搜索关系记录

时间:2016-06-20 20:58:20

标签: php silverstripe

我有两个DataObject名为AosMemberCouncil

Council班级与$has_one的关系AosMember

class Council extends DataObject {

    public static $db = array(
        'Title' => 'Varchar(255)',
        'Year' => 'Year(4)'
    );

    public static $has_one = array(
        'Member' => 'AosMember'
    );

    public static $summary_fields = array(
        'Year',
        'Title'
    );

    private static $searchable_fields = array(
        'Member.LAST_NAME' => 'PartialMatchFilter'
    );
}

当我进入CMS中的ModelAdmin Council时,我会看到Member的文字输入。会员数是+500,所以理想情况下我希望能够输入姓氏并获得某种类型的自动填充。

至少我想要一个下拉字段。但我无法找到如何获得的说明。

3 个答案:

答案 0 :(得分:3)

Member.ID添加到可搜索字段列表中会使此字段成为自动完成下拉字段:

class Council extends DataObject {
    // ...

    private static $searchable_fields = array(
        'Member.ID' => array(
            'title' => 'Member',
            'filter' => 'ExactMatchFilter'
        )
    );
}

要在字段中搜索的文本将是AosMember对象的标题。如果AosMember没有标题,那么我们可以通过getTitle函数返回特定内容:

class AosMember extends DataObject {
    // ...

    public function getTitle() {
        return $this->FirstName . ' ' . $this->LastName;
    }
}

答案 1 :(得分:2)

您需要在$searchable_fields静态和scaffoldSearchFields()调用中为SS提供更多信息。这样的事情(我从我自己的一个项目中删除了这个,你可能需要稍微改变它以供你自己使用)

/**
 * @var array
 */
private static $searchable_fields = array(
    'MyField' => array(
        'title'     => 'Title',
        'field'     => 'DropdownField',
        'filter'    => 'PartialMatchFilter'
    )
);

然后你需要指示SS如何搭建你的可搜索成员字段:

    public function scaffoldSearchFields($_params = null) {
        $fields = parent::scaffoldSearchFields();
        $field = DropdownField::create('MyField','My field search', Member::get()->map()->toArray());
        $fields->replaceField('MyField', $field);

        return $fields;
    }

一旦它正常工作,你应该在CMS中看到DropdownField&#39}。中心"过滤"窗格。注:您将需要一些进一步的逻辑来处理has_one关系。上述示例按原样,仅适用于通过$db定义的直接字段。

答案 2 :(得分:2)

我假设你让模特管理员来支持它应该用于管理的编辑器有一个关系。

这将是一个下拉字段,但如果有超过100条记录默认为输入字段以供内存使用,请参阅对已接受答案的评论:Silverstripe admin: "Has one" dropdown converts to ordinary input field after import

我建议使用这些作为管理has-one关系的替代方法:

没有测试过任何一个,但我认为第一个对你的情况最好。