class pq\Gateway\Table\Relations
 implements Countable, IteratorAggregate

Retrieve any relations referenced by the table through foreign keys. See pq\Gateway\Table::by() and pq\Gateway\Table::with().

Query:

The following query is executed by the current executor of the table to retrieve the table references:


select
    regexp_replace(att1.attname, '_'||att2.attname||'$', '')
                  as "name"
    ,cl1.relname  as "foreignTable"
    ,att1.attname as "foreignColumn"
    ,cl2.relname  as "referencedTable"
    ,att2.attname as "referencedColumn"
from
     pg_constraint co
    ,pg_class      cl1
    ,pg_class      cl2
    ,pg_attribute  att1
    ,pg_attribute  att2
where
     cl1.relname  = \$1
and co.confrelid != 0
and co.conrelid   = cl1.oid
and co.conkey[1]  = att1.attnum and cl1.oid = att1.attrelid
and co.confrelid  = cl2.oid
and co.confkey[1] = att2.attnum and cl2.oid = att2.attrelid
order by 
    att1.attnum

Cache:

The result of this query is cached in the metadata cache under the following key, where $table is converted to a string by pq\Gateway\Table::__toString():


"$table:relations"

Foreign key access:

Relations can be accessed as virtual properties or through pq\Gateway\Table\Relations::getReference().


<?php

use pq\Gateway\Table;

$relations = new Table\Relations(new Table("account_email"));

var_dump($relations->getReference("account""account"));
var_dump($relations->account["account"]);

?>

NOTE:
The relation name is the column name of the foreign key with the column name of the referenced column cut off the end.

Properties:

Functions: