我在哪里可以找到 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' 而不是我想象的 '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',我找到名称 'contacts' 的唯一位置是在文件 modules/Cases/vardefs.php

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

同样在关系 table 中 relationship_name 是 'contacts_cases'。

有什么地方可以让我看到调用 load_relationship 时必须使用的真实姓名,或者唯一的解决方案是在 vardefs 中查找?

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

请注意,根据您使用的对象,自定义关系的名称会有所不同。例如,自定义模块 MealsIngredients 之间的自定义一对多关系可能在 Meals 端被命名为 key_meals_ingredients_meals 并且key_meals_ingredients_ingredients 在配料方面。

您也可以使用 Studio 在用户界面中找到这些内容。导航到 Studio,然后导航到您的模块,然后导航到 Relationships table。 Relationships table 左侧的 Name 列是您要查找的值。

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

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

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

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

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