Php Get在SilverStripe中有一个关系

Php Get在SilverStripe中有一个关系,php,silverstripe,Php,Silverstripe,我有一个名为applicator的数据对象,它有一个成员,这是SilverStripe成员类 当会员登录并访问ApplicationPage时,我希望能够基于会员申请者数据填充表单 我可以做到这一点,但我觉得我应该能够更轻松地访问数据 以下是我的工作: $memberID = Member::currentUserID(); $applicant = Applicant::get()->filter('MemberApplicantID', $memberID)->first();

我有一个名为applicator的数据对象,它有一个成员,这是SilverStripe成员类

当会员登录并访问ApplicationPage时,我希望能够基于会员申请者数据填充表单

我可以做到这一点,但我觉得我应该能够更轻松地访问数据

以下是我的工作:

$memberID = Member::currentUserID();
$applicant = Applicant::get()->filter('MemberApplicantID', $memberID)->first();

$form->loadDataFrom($applicant);

我是否应该实例化一个成员,然后调用其相对$MemberAppender?

听起来您希望能够通过查看当前用户的成员记录来避免额外的ORM查询,但是这不是SilverStripe或任何使用SQL连接的系统的工作方式

当您将$has_one添加到类中时,实际上是将外键添加到该类的表中。在您的情况下,它将被称为memberapplicationId,它是成员表主键(其ID字段)的外键。因此,您的ORM查询需要首先通过申请者实例

警告:上述情况并不完全正确,DataObject允许您在模型类上定义私有SilverStripe config static$behings\u,这允许您以另一种方式进行查询。我以前从来并没有这样做过,但看起来你们会在一个定制的DataExtension上声明这一点,这个DataExtension装饰了成员,并且有一个applicator值。请参阅DataObject::belongsToComponent

您还可以稍微简化现有的ORM查询,而不必显式实例化DataList,但到目标数据的路由保持不变:

// SilverStripe >= 3.2
$applicant = DataObject::get_one('Applicant', array('MemberApplicantID = ?' => $memberID));

// SilverStripe < 3.2
$applicant = DataObject::get_one('Applicant', '"MemberApplicantID" = ' . $memberID); 

听起来您希望通过查看当前用户的成员记录来避免额外的ORM查询,但是这不是SilverStripe或任何使用SQL连接的系统的工作方式

当您将$has_one添加到类中时,实际上是将外键添加到该类的表中。在您的情况下,它将被称为memberapplicationId,它是成员表主键(其ID字段)的外键。因此,您的ORM查询需要首先通过申请者实例

警告:上述情况并不完全正确,DataObject允许您在模型类上定义私有SilverStripe config static$behings\u,这允许您以另一种方式进行查询。我以前从来并没有这样做过,但看起来你们会在一个定制的DataExtension上声明这一点,这个DataExtension装饰了成员,并且有一个applicator值。请参阅DataObject::belongsToComponent

您还可以稍微简化现有的ORM查询,而不必显式实例化DataList,但到目标数据的路由保持不变:

// SilverStripe >= 3.2
$applicant = DataObject::get_one('Applicant', array('MemberApplicantID = ?' => $memberID));

// SilverStripe < 3.2
$applicant = DataObject::get_one('Applicant', '"MemberApplicantID" = ' . $memberID); 
难道我不能实例化一个成员,然后调用它的相对$MemberAppender吗

当然。我假设您有一个1:1的关系,那么您必须使用$BELLENS\u定义成员上的计数器部分才能查看

现在将DataExtension添加到/mysite/_config/config.yml中的成员对象

Member:
  extensions:
    - MemberApplicantExtenension
并运行开发/构建刷新

现在,您可以使用内置的ORM magic从会员处获取相关申请人:

//Get the current Member
$member = Member::CurrentUser();

//get the $belongs_to
$applicant = $member->Applicant();
难道我不能实例化一个成员,然后调用它的相对$MemberAppender吗

当然。我假设您有一个1:1的关系,那么您必须使用$BELLENS\u定义成员上的计数器部分才能查看

现在将DataExtension添加到/mysite/_config/config.yml中的成员对象

Member:
  extensions:
    - MemberApplicantExtenension
并运行开发/构建刷新

现在,您可以使用内置的ORM magic从会员处获取相关申请人:

//Get the current Member
$member = Member::CurrentUser();

//get the $belongs_to
$applicant = $member->Applicant();

那么一个申请人有一个成员相关,反之亦然?一名会员是否有一名申请人?申请人-成员是1:1关系还是1:n关系?因此一个申请人有一个成员相关,反之亦然?一名会员是否有一名申请人?申请人-会员是1:1关系还是1:n关系?