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

时间:2015-03-13 11:40:37

标签: php sugarcrm

我已经被困了一段时间,因为在一个案例逻辑钩子中,我无法加载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',这是我找到姓名'联系人'的唯一地方。在文件模块/ 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?

2 个答案:

答案 0 :(得分:0)

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

请注意,根据您正在使用的对象,自定义关系会被称为不同的关系。例如,自定义模块 Meals Ingredients 之间的自定义一对多关系可能在膳食方面被命名为key_meals_ingredients_meals,在key_meals_ingredients_ingredients上可能被命名为{{1}}成分方面。

您也可以使用Studio在用户界面中找到这些内容。导航到Studio,然后导航到您的模块,然后导入Relationships表。 “关系”表左侧的“名称”列是您之后的值。

答案 1 :(得分:0)

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

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

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

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

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