Silverstripe:从多个关系自定义上载获取var

Silverstripe:从多个关系自定义上载获取var,silverstripe,relation,Silverstripe,Relation,我想知道如何定制这个上传字段,以便从$BETHENS\u MUN\u MUN Act表中获取 代码的一部分 <? class MultipleBlock extends DataObject { private static $db = array( 'Act' => 'Varchar', private static $many_many = array( 'MultipleBlockColumns' => 'Mult

我想知道如何定制这个上传字段,以便从$BETHENS\u MUN\u MUN Act表中获取

代码的一部分

<? 

class MultipleBlock extends DataObject {

    private static $db = array(
        'Act' => 'Varchar',


    private static $many_many = array(
        'MultipleBlockColumns' => 'MultipleBlockColumn'
    );


}

class MultipleBlockColumn extends DataObject {

    static $belongs_many_many = array(
        'MultipleBlocks' => 'MultipleBlock'
    );
    private static $has_one = array(
        'Image' => 'Image',
    );

    $fields->addFieldToTab('Root.Image',$uploadField = new UploadField(
                $name = 'Image',
                $title = 'Image'
            )    
        );

    enter code here
    $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$var);

}
有什么想法吗?
提前谢谢

如果我正确读取了您的代码,那么您无法访问
Act
变量的原因是您没有遍历
多块
关系。如何为相关的
多块
获取
Act
变量的示例如下(在模板/布局文件中):

当您像在
$this->MultipleBlocks->Act
中那样引用
多块
时,它将不起作用,因为
多块
是一个多关系,因此它实际上是一个
数据列表
,而不是一个单独的对象

使现代化 以下是has_many/has_one示例:

class MultipleBlock extends DataObject {

    private static $db = array(
        'Act' => 'Varchar',
    );


    private static $has_many = array(
        'MultipleBlockColumns' => 'MultipleBlockColumn'
    );


}

class MultipleBlockColumn extends DataObject {

    private static $has_one = array(
        'MultipleBlock' => 'MultipleBlock'
    );
    private static $has_one = array(
        'Image' => 'Image',
    );

    public function getBlockAct(){
        return $this->MultipleBlock()->Act;
    }

}

哇。。。经过几天的学习,我发现了我的解决方案。要从“多块”列实现多块,请执行以下操作:

parent::MultipleBlocks();
要自定义“保存到文件夹”,请输入我的代码。。。它工作得非常好。必须首先创建MultiBlockColumns的ID

$parent = parent::MultipleBlocks();
            $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act);

就这样!感谢您提交想法。

php示例仅显示如何循环通过块并访问
Act
变量。在模板/布局中渲染它不会处理任何事情。如果我理解。。。这是不可能的。但是,如果关系有多个,并且有一个,您认为我能用$this->MultipleBlocksID->Act获得表变量Act吗?不是为模板获取变量,而是为上载字段进行自定义。如果您的MultipleBlock有多个MultipleBlockColumns,而其中一个是相反的,那么您可以执行
$yourMultipleBlockColumns->MultipleBlockRelationName()->Act
来获取该变量。我已经更新了上面的答案,以显示如何更完整地完成这项工作。
class MultipleBlock extends DataObject {

    private static $db = array(
        'Act' => 'Varchar',
    );


    private static $has_many = array(
        'MultipleBlockColumns' => 'MultipleBlockColumn'
    );


}

class MultipleBlockColumn extends DataObject {

    private static $has_one = array(
        'MultipleBlock' => 'MultipleBlock'
    );
    private static $has_one = array(
        'Image' => 'Image',
    );

    public function getBlockAct(){
        return $this->MultipleBlock()->Act;
    }

}
parent::MultipleBlocks();
$parent = parent::MultipleBlocks();
            $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act);