SugarCRM Enterprise 7.9.2.0 - SugarQuery 无法正常工作。 [php]

SugarCRM Enterprise 7.9.2.0 - SugarQuery just won't work. [php]

好的,所以我正在尝试使用 SugarQuery 在我的自定义插件中从 SugarCRM 中提取数据。糖在本地安装。 当我使用 Sugar DbManager 时,我能够从数据库中获取数据,如下所示,我的 $result 包含 first_name:

$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();

但是当我尝试使用 SugarQuery 生成器时:

$sugarQuery = new SugarQuery();
$sugarQuery->from(BeanFactory::getBean("Contacts"));
$sugarQuery->select('first_name');
$sugarQuery->where()->contains('id',$id);
$sugarQuery->distinct(true);
$result = $sugarQuery->execute();

我的结果是一个空数组,当我检查 mysql 日志时,这是 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,但没有从数据库中检索到任何结果。可能存在 team_memberships.user_id 没有值的问题。当我手动输入 team_memberships.user_id 时,SQL 起作用并且 returns 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 的调度程序、LogicHook、API 等),那么当前用户可能未加载而且您必须手动执行此操作。

global $current_user;
$current_user = new User();
$current_user->getSystemUser();

将加载管理员用户。您可能需要调整它以加载您选择的用户。