我被困了一段时间,因为在逻辑钩子中,我无法像加载另一个自定义关系那样加载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_Case”的形式出现,我在文件模块/Cases/vardefs.php中找到“联系人”的唯一位置
'contacts' =>
array (
'name' => 'contacts',
'type' => 'link',
'relationship' => 'contacts_cases',
'source'=>'non-db',
'vname'=>'LBL_CONTACTS',
),在relationships表中,relationship_name也是'contacts_cases‘。
有没有地方可以看到我在调用load_relationship时必须使用的实名,或者唯一的解决方案是查看vardefs?
发布于 2015-03-13 21:25:22
最简单的单一来源是查看缓存目录,因为这将所有自定义和开箱即用的字段和关系合并到一个大数组中。要从帐户角度查看所有关系,请检查cache/modules/Accounts/Accountsvardefs.php并查找relationships键和type参数为link的任何fields。您会发现“股票”关系,如contacts和opportunities,以及任何和所有自定义关系都内置在该数组中。
请注意,定制关系将根据您正在处理的对象而被称为不同的东西。例如,自定义模块、膳食和配料之间的一对多关系可能被命名为key_meals_ingredients_meals (在Meals侧),key_meals_ingredients_ingredients (在配料侧)。
您还可以使用Studio在用户界面中找到这些内容。导航到Studio,然后导航到模块,然后导航到Relationship表。Relationship表左侧的Name列是您要查找的值。
发布于 2021-04-10 11:15:44
若要获取load_relationship的所有可能值的列表,请使用以下代码片段:
$rels = [];
foreach ($bean->getFieldDefinitions() as $key=>$val) {
if (isset($val['type']) && $val['type'] === 'link') {
$rels[] = $key;
}
}这从一个$bean开始(例如,在一个逻辑钩子中),并生成一个具有所有有效关系名的rels[]数组。
这段代码意味着作为临时帮助,使用它获取列表并选择正确的值,然后删除这段代码。
这使用了与load_relationship函数相同的定义集,因此它应该是准确的。
https://stackoverflow.com/questions/29031308
复制相似问题