records_related()

Get the records in another table that are linked (via a lookup field) to a given record, in either direction.

Syntax

records_related(sourceTable, recordId, relatedTable, direction = "in")

Parameters

Name Type Required Description
sourceTable string yes Table name or id of the record you start from.
recordId int yes The source record's primary key.
relatedTable string yes Table name or id of the related records to fetch.
direction string no "in" (default) = records in relatedTable that link to the source record. "out" = records in relatedTable that the source record links to via its own lookup field. "auto" = resolve to whichever direction the relationship actually exists in (outgoing if only outgoing, otherwise incoming).

Direction

A lookup field connects two tables one way, but the relationship can be read from either end:

  • Incoming ("in") — the related table owns the lookup field pointing back at the source record's table. E.g. from a Customer, get the Orders that link to it.
  • Outgoing ("out") — the source record owns the lookup field. E.g. from an Order, get the Customer(s) it links to. Unlike the lookup token (which carries only id + title), this returns the linked records with all their fields.

Returns

A list (array) of records from relatedTable related to the source record in the requested direction.

Example

$orders = records_related("customers", $record["_meta"]["id"], "orders");
sys_log($record["name"] . " has " . count($orders) . " orders");
foreach ( $orders as $o ) {
    sys_log(" - " . $o["title"] . ": $" . $o["amount"]);
}

Example output

[
    ["title" => "Order #1001", "amount" => 250, "_meta" => ["id" => 501, "title" => "Order #1001"]],
    ["title" => "Order #1002", "amount" => 80,  "_meta" => ["id" => 502, "title" => "Order #1002"]]
]

Outgoing example

// From an order, fetch the full customer record(s) it links to.
$customers = records_related("orders", $record["_meta"]["id"], "customers", "out");
foreach ( $customers as $c ) {
    sys_log($c["name"] . " — " . $c["tier"]);
}

Notes

  • For "in", the related table must have a lookup field pointing to the source table; for "out", the source record's table must have a lookup field pointing to the related table.
  • Throws if the source record can't be found, or if the two tables aren't related in the requested direction.
  • Outgoing returns [] when the source record's lookup field is empty.

See also: records_query()