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

4

我遇到了一些问题,因为在一个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”,我在文件modules/Cases/vardefs.php中找到了唯一的“contacts”名称。
'contacts' =>
array (
  'name' => 'contacts',
  'type' => 'link',
  'relationship' => 'contacts_cases',
  'source'=>'non-db',
      'vname'=>'LBL_CONTACTS',
),

在关系表中,relationship_name 为“contacts_cases”。

我是否有任何地方可以查看调用load_relationship时必须使用的真实名称,或者唯一的解决方案是查看vardefs?

2个回答

2
最简单的方法是查看缓存目录,因为这将所有自定义和开箱即用的字段和关系合并成一个大数组。要从账户角度查看所有关系,请检查cache/modules/Accounts/Accountsvardefs.php文件,并查找relationships键以及任何fields,其中type参数为link。您将找到“库存”关系,例如contactsopportunities,以及内置于该数组中的所有自定义关系。

请注意,自定义关系将根据您正在使用的对象而被称为不同的名称。例如,在自定义模块MealsIngredients之间的自定义一对多关系可能在Meals方面被命名为key_meals_ingredients_meals,而在Ingredients方面被命名为key_meals_ingredients_ingredients

您还可以使用Studio在用户界面中找到它们。进入Studio,然后进入您的模块,然后进入关系表。关系表左侧的名称列就是您要查找的值。


谢谢,确实只有一个文件可以查看是很有帮助的,但奇怪的是我必须以不同的方式调用默认和自定义关系(默认使用字段名称,自定义使用关系名称)。 我总是使用在Studio中出现的名称,这是我第一次注意到这种差异。我检查了你提供的另一个提示,并注意到我所有的自定义关系在两侧都被称为相同的名称,这件事可能取决于SugarCRM版本吗? - lyisia
关系是一个vardef或者relationship,不是基于它是股票还是定制的,而是基于它被创建时的约定。尽管很令人困惑,你会发现股票关系两种方式都有。其中一部分原因是它是一个一对多还是多对多的关系。无论哪种方式,这就是为什么检查缓存文件总是有帮助的原因 :) - Matthew Poer

0

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

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

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

这段代码只是作为临时帮助,用于获取列表并选择正确的值,然后删除此代码。

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


这是针对SuiteCRM的,我猜在Sugar中应该是一样的,但我没有尝试过。 - pgr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接