How to retrieve User.IsPortalEnabled info from CreatedBy field on a object like Feed Item using Apex and SOQL in Salesforce

The syntax for polymorphic queries doesn’t require the relationship name

You have:

SELECT Id, TYPEOF CreatedBy WHEN User THEN Created.Name, Created.IsPortalEnabled END 
      FROM Feeditem

You can use:

SELECT Id, TYPEOF CreatedBy WHEN User THEN Name, IsPortalEnabled END 
      FROM Feeditem

To execute in Apex:

for (FeedItem feedItem: [SELECT Id, TYPEOF CreatedBy WHEN User THEN Name, IsPortalEnabled END 
                       FROM Feeditem]) {
   User user = (User) feedItem.CreatedBy;
   system.debug(user.Name + ' IsPortalEnabled=' +user.IsPortalEnabled);
}

Note you have to cast to User to get the polymorphic relationship object. If using more than one polymorphic object in the query, use instanceOf operator on createdBy to decide what object to cast to.

Read more here: Source link