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));
应该可以解决问题。
如果您确实需要团队安全并且您的代码在独立的 php 脚本中运行(而不是 Sugar 的调度程序、LogicHook、API 等),那么当前用户可能未加载而且您必须手动执行此操作。
global $current_user;
$current_user = new User();
$current_user->getSystemUser();
将加载管理员用户。您可能需要调整它以加载您选择的用户。
好的,所以我正在尝试使用 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));
应该可以解决问题。
如果您确实需要团队安全并且您的代码在独立的 php 脚本中运行(而不是 Sugar 的调度程序、LogicHook、API 等),那么当前用户可能未加载而且您必须手动执行此操作。
global $current_user;
$current_user = new User();
$current_user->getSystemUser();
将加载管理员用户。您可能需要调整它以加载您选择的用户。