alpotero
alpotero

Reputation: 21

Salesforce PHP Toolkit - pullup data from nested SOQL query

Ideally, when i do single SOQL query on salesforce via PHPToolkit I have no problem with it.

Example Code:

$querySourceQueues = "SELECT Id, AccountId, CaseNumber FROM Case WHERE CaseNumber = '00491258'";
$result = $mySforceConnection->query($querySourceQueues);
if ($result->size > 0) {
     foreach ($result->records as $case) {
          $CaseId = $case->Id;
          $AccountId = $case->AccountId;
          $CaseNum = $case->CaseNumber;

          echo "Case ID: ".$CaseId."<br>";
          echo "Account ID: ".$AccountId."<br>";
          echo "Case Number: ".$CaseNum."<br>";
     }
} else {
     echo "No Result";
}

But when I do nested SOQL query, I don't know how to pull data from the result of sub query. Here's my code below:

$querySourceQueues2 = "SELECT Id, AccountId, CaseNumber, (SELECT ActivityDate, Subject, Description FROM ActivityHistories ORDER BY ActivityDate DESC, LastModifiedDate DESC LIMIT 500) FROM Case WHERE CaseNumber = '00491258'";
$result2 = $mySforceConnection->query($querySourceQueues2);
if ($result->size > 0) {
     foreach ($result2->records as $case) {

          ////No Error in this part
          $CaseId = $case->Id;
          $AccountId = $case->AccountId;
          $CaseNum = $case->CaseNumber;
          echo "Case ID: ".$CaseId."<br>";
          echo "Account ID: ".$AccountId."<br>";
          echo "Case Number: ".$CaseNum."<br>";

          ////I got the error on this part
          $ActivityDate = $case->ActivityHistories->ActivityDate; // Line 66
          $Subject = $case->ActivityHistories->Subject; // Line 67
          $Description = $case->ActivityHistories->Description; // Line 68
          echo "Activity Date: ".$ActivityDate."<br>";
          echo "Subject: ".$Subject."<br>";
          echo "Description: ".$Description."<br>";
     }
} else {
     echo "No result.";
}

Here's the error code I got from above.

Notice: Undefined property: stdClass::$ActivityDate in C:\xampp\htdocs\automation\tcse\engine\nested_query.php on line 66

Notice: Undefined property: stdClass::$Subject in C:\xampp\htdocs\automation\tcse\engine\nested_query.php on line 67

Notice: Undefined property: stdClass::$Description in C:\xampp\htdocs\automation\tcse\engine\nested_query.php on line 68

When I do echo print_r($result2->records); here's what I got:

Array (
    [0] => stdClass Object (
        [Id] => 5000B00000cfiq2QAA
        [AccountId] => 001U000000aBVbIIAW
        [ActivityHistories] => stdClass Object (
            [done] => 1 [queryLocator] => [records] => Array (
                [0] => stdClass Object (
                    [Id] => [ActivityDate] => 2017-07-06
                    [Description] => This is a system-generated email...
                    [Subject] => Request has been updated
                )
                [1] => stdClass Object (
                    [Id] => [ActivityDate] => 2017-07-06
                    [Description] => This is a system-generated email...
                    [Subject] => Email: Request has been updated
                )
            ) [size] => 2
        )
        [CaseNumber] => 00491258
    )
) 1

My goal here is to get the data inside ActivityHistories (Id, Description & Subject) so I can assign it to a variable and continue with my project. I need your help guys.

Upvotes: 1

Views: 323

Answers (1)

alpotero
alpotero

Reputation: 21

Me with by friends solved this by the following code below:

$querySourceQueues2 = "SELECT Id, AccountId, CaseNumber, (SELECT ActivityDate, Subject, Description FROM ActivityHistories ORDER BY ActivityDate DESC, LastModifiedDate DESC LIMIT 500) FROM Case WHERE CaseNumber = '00491258'";
$result2 = $mySforceConnection->query($querySourceQueues2);
if ($result2->size > 0) {
    foreach ($result2->records as $case) {
        $CaseId = $case->Id;
        $AccountId = $case->AccountId;
        $CaseNum = $case->CaseNumber;
        echo "Case ID: ".$CaseId."<br>";
        echo "Account ID: ".$AccountId."<br>";
        echo "Case Number: ".$CaseNum."<br>";

        foreach ($case->ActivityHistories->records as $record) {
            $ActivityDate = $record->ActivityDate;
            $Subject = $record->Subject;
            $Description = $record->Description;

            echo "Activity Date: ".$ActivityDate."<br>";
            echo "Subject: ".$Subject."<br>";
            echo "Description: ".$Description."<br>";
        }
    }
} else {
    echo "No result.";
}

In a layman's term: Since the result is an array inside an array, we pulled the data using loop inside a loop.

Upvotes: 1

Related Questions