前言:可以先阅读官方文档了解SuiteCRM模块之间关联关系的实现逻辑。[官方文档]
在获取关联数据之前需要弄清楚link、relate和relationship之间的关系和区别。[待补充]
在这里主要是区别通过link和relationship获取关联模块数据的实现。
①通过link获取关联模块数据
1)合同在文档vardefs中link定义如下:
'aos_contracts' => array(
'name' => 'aos_contracts',
'vname' => 'LBL_AOS_CONTRACTS',
'type' => 'link',
'relationship' => 'aos_contracts_documents',
'source' => 'non-db',
'module' => 'AOS_Contracts',
),
2)获取文档关联的合同数据
if($doc_bean->load_relationship('aos_contracts')){
$contract_beans = $doc_bean->aos_contracts->getBeans(["where"=>"aos_contracts.status = 'Delivered' "]);
if(empty($contract_beans)){
return;
}
}
②通过relationship获取关联模块的数据
1)合同在文档vardefs中relationship定义如下:
'relationships' => array(
'aos_contracts_documents' => array(
'lhs_module' => 'AOS_Contracts',
'lhs_table' => 'aos_contracts',
'lhs_key' => 'id',
'rhs_module' => 'Documents',
'rhs_table' => 'documents',
'rhs_key' => 'id',
'relationship_type' => 'many-to-many',
'join_table' => 'aos_contracts_documents',
'join_key_lhs' => 'aos_contracts_id',
'join_key_rhs' => 'documents_id',
),
),
2)获取文档关联的合同数据
$doc_contract_key = Relationship::retrieve_by_modules("Documents","AOS_Contracts",$GLOBALS["db"]);
$contract_beans = $doc_bean->get_linked_beans($doc_contract_key,'AOS_Contracts',' ',0,-1,0," aos_contracts.status = 'Delivered' ");