我已经被困了一段时间,因为在一个案例逻辑钩子中,我无法加载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?
答案 0 :(得分:0)
最简单的单一来源是查看缓存目录,因为这会将所有自定义和开箱即用的字段和关系合并为一个大数组。要从“帐户”视角查看所有关系,请检查cache/modules/Accounts/Accountsvardefs.php
并查找relationships
密钥以及fields
参数为type
的任何link
。你会发现" stock" contacts
和opportunities
之类的关系以及任何和所有自定义关系都内置在该数组中。
请注意,根据您正在使用的对象,自定义关系会被称为不同的关系。例如,自定义模块 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
函数使用的定义相同,因此应该是准确的。