我在哪里可以找到SugarCRM中默认关系的名称


Where can I find the names of default relationships in SugarCRM?

我已经卡了一段时间,因为在 Cases 逻辑钩子中,我无法像加载另一个自定义关系那样加载contacts_cases关系,如下所示:

$bean->load_relationship('cases_lines');
$lines = $bean->cases_lines->getBeans();
$bean->load_relationship('contacts_cases');
$contacts->$bean->contacts_cases->getBeans();

前者有效,后者无效。
我发现我使用了错误的名称,因为它是默认关系,它的名称是"联系人"而不是我想象的"contacts_cases",所以我像这样更改我的代码:

$bean->load_relationship('contacts');
$contacts->$bean->contacts->getBeans();

现在它运行良好。
我在文档中没有发现默认关系和自定义关系之间的命名差异,我发现上面的解决方案只是调试 SugarBean 方法"load_relationship"并打印出加载的关系。

这行代码

error_log('LOADED RELATIONSHIPS '.print_r($this->loaded_relationships, true));

打印出来

Array'n('n    [0] => cases_lines'n    [1] => contacts'n)'n

在 Studio 中,关系显示为"contacts_cases",我唯一找到"联系人"名称的地方是在文件模块/案例/vardefs 中.php

'contacts' =>
array (
  'name' => 'contacts',
  'type' => 'link',
  'relationship' => 'contacts_cases',
  'source'=>'non-db',
      'vname'=>'LBL_CONTACTS',
),

同样在关系表中,relationship_name是"contacts_cases"。

有没有地方可以看到我在打电话时必须使用的真实姓名load_relationship或者唯一的解决方案是在 vardefs 中查找?

最简单的单一来源是查看缓存目录,因为这将所有自定义和现成的字段和关系合并到一个大数组中。若要从"帐户"角度查看所有关系,请选中cache/modules/Accounts/Accountsvardefs.php并查找relationships键以及link type参数的任何fields。您会发现"股票"关系,如contactsopportunities,以及任何和所有自定义关系都内置到该数组中。

请注意,自定义关系将被称为不同的东西,具体取决于您正在使用的对象。例如,自定义模块"膳食"和"配料"之间的自定义一对多关系可能在"餐"端命名为"key_meals_ingredients_meals",在"配料"端命名为key_meals_ingredients_ingredients

您还可以使用 Studio 在用户界面中找到这些内容。依次导航到 Studio、您的模块和"关系"表。"关系"表左侧的"名称"列是你要追求的值。

要获取 load_relationship 的所有可能值的列表,请使用以下代码片段:

$rels = [];
foreach ($bean->getFieldDefinitions() as $key=>$val) {
    if (isset($val['type']) && $val['type'] === 'link') {
        $rels[] = $key;
    }
}

这从$bean开始(例如,在逻辑挂钩内部),并生成一个包含所有有效关系名称的rels[]数组。

这段代码旨在作为临时帮助,使用它来获取列表并选择正确的值,然后删除此代码。

这使用与load_relationship函数相同的定义集,因此它应该是准确的。