SuiteCRM单个记录获取关联模块数据

183 阅读1分钟

前言:可以先阅读官方文档了解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' ");