Skip to main content
The getRecords wire adapter retrieves multiple records across different object types in a single request.

Import

import { getRecords } from 'lightning/uiRecordApi';

Parameters

records
array
required
Array of record request objects. Each object specifies record IDs and fields to retrieve.

Record Request Object

recordIds
string[]
required
Array of record IDs to retrieve.
fields
string[]
required
Array of fields to retrieve for these records.
optionalFields
string[]
Array of fields to retrieve if available.

Basic Usage

import { LightningElement, wire } from 'lwc';
import { getRecords } from 'lightning/uiRecordApi';
import NAME_FIELD from '@salesforce/schema/Contact.Name';
import EMAIL_FIELD from '@salesforce/schema/Contact.Email';
import getContactList from '@salesforce/apex/ContactController.getContactList';

export default class WireGetRecords extends LightningElement {
    records;

    @wire(getContactList)
    wiredContacts({ error, data }) {
        if (data) {
            this.records = [
                {
                    recordIds: [data[0].Id, data[1].Id],
                    fields: [NAME_FIELD],
                    optionalFields: [EMAIL_FIELD]
                }
            ];
        }
    }

    @wire(getRecords, {
        records: '$records'
    })
    recordResults;
}

Multiple Object Types

Retrieve records from different object types in a single request:
import { LightningElement, wire } from 'lwc';
import { getRecords } from 'lightning/uiRecordApi';
import NAME_FIELD from '@salesforce/schema/Contact.Name';
import EMAIL_FIELD from '@salesforce/schema/Contact.Email';
import ACCOUNT_NAME_FIELD from '@salesforce/schema/Account.Name';
import getContactList from '@salesforce/apex/ContactController.getContactList';
import getAccountList from '@salesforce/apex/AccountController.getAccountList';

export default class WireGetRecordsDifferentTypes extends LightningElement {
    records = [];

    @wire(getAccountList)
    wiredAccounts({ error, data }) {
        if (data) {
            const accountRecord = [
                {
                    recordIds: [data[0].Id],
                    fields: [ACCOUNT_NAME_FIELD]
                }
            ];
            this.records = this.records
                ? this.records.concat(accountRecord)
                : accountRecord;
        }
    }

    @wire(getContactList)
    wiredContacts({ error, data }) {
        if (data) {
            const contactRecord = [
                {
                    recordIds: [data[0].Id],
                    fields: [NAME_FIELD],
                    optionalFields: [EMAIL_FIELD]
                }
            ];
            this.records = this.records
                ? this.records.concat(contactRecord)
                : contactRecord;
        }
    }

    @wire(getRecords, {
        records: '$records'
    })
    recordResults;
}

Reactive Parameters

Use the $ prefix to make the records array reactive:
@wire(getRecords, {
    records: '$records'  // Re-executes when this.records changes
})
recordResults;

Response Format

The wire adapter returns an object with data and error properties. The data contains:
{
    results: [
        {
            result: { /* record data */ },
            statusCode: 200
        }
    ]
}

Source Examples

  • wireGetRecords - Single object type retrieval
  • wireGetRecordsDifferentTypes - Multiple object types in one request

Build docs developers (and LLMs) love