我遇到了一些问题,因为在一个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?
vardef
或者relationship
,不是基于它是股票还是定制的,而是基于它被创建时的约定。尽管很令人困惑,你会发现股票关系两种方式都有。其中一部分原因是它是一个一对多还是多对多的关系。无论哪种方式,这就是为什么检查缓存文件总是有帮助的原因 :) - Matthew Poer