好的,所以我试图使用SugarQuery从我的自定义插件中的SugarCRM中提取数据。糖是本地安装的。
当我使用Sugar DbManager时,我可以从DB获取数据,如下所示,$result包含名字:
$GLOBALS['db'];
$db = DBManagerFactory::getInstance();
$query = 'SELECT first_name FROM contacts WHERE id = ?';
$conn = $GLOBALS['db']->getConnection();
$stmt = $conn->executeQuery($query, array($id));
$result = $stmt->fetchAll();
但当我尝试使用SugarQueryBuilder时:
$sugarQuery = new SugarQuery();
$sugarQuery->from(BeanFactory::getBean("Contacts"));
$sugarQuery->select('first_name');
$sugarQuery->where()->contains('id',$id);
$sugarQuery->distinct(true);
$result = $sugarQuery->execute();
我的结果是一个空数组,当我检查my SQL日志时,这是SQL:
SELECT DISTINCT contacts.first_name FROM contacts INNER JOIN (
SELECT tst.team_set_id
FROM team_sets_teams tst
INNER JOIN team_memberships team_memberships
ON tst.team_id = team_memberships.team_id
AND team_memberships.user_id = ''
AND team_memberships.deleted = 0
GROUP BY tst.team_set_id
) contacts_tf ON contacts_tf.team_set_id = contacts.team_set_id WHERE (contacts.id LIKE '%b8e8d8fe-de50-11e7-8770-1c3947366abf%') AND (contacts.deleted = 0)
尝试从phpmyadmin手动运行SQL,但没有从DB检索到任何结果。可能是team_memberships.user_id没有值的问题。当我手动输入team_memberships.user_id时,SQL工作并返回first_name。
你知道为什么这个team_memberships.user_id是空的吗?为什么SugarQuery Builder没有为它设置任何值?不幸的是,我在SugarCrm文档中找不到任何关于它的信息。也许我的SugarQuery有问题?
最佳答案
如果不需要此查询来使用团队安全性,则更改
$sugarQuery->from(BeanFactory::getBean("Contacts"))
到
$sugarQuery->from(BeanFactory::getBean("Contacts"), array('team_security' => false));
应该会成功的。
见https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_7.9/Data_Framework/Database/SugarQuery/#from
如果您确实需要团队安全性,并且您的代码在独立的php脚本中运行(而不是Sugar的调度程序、逻辑钩子、API等),那么可能当前用户没有加载,您必须手动加载。
global $current_user;
$current_user = new User();
$current_user->getSystemUser();
将加载管理员用户。您可能需要调整它来加载您选择的用户。
关于php - SugarCRM Enterprise 7.9.2.0-SugarQuery不能正常工作。 [php],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47757813/