+ $this->cell($p)->set($v);
+ }
+
+ /**
+ * Unset a cell value
+ * @param string $p
+ */
+ function __unset($p) {
+ unset($this->data[$p]);
+ unset($this->cell[$p]);
+ }
+
+ /**
+ * Check if a cell isset
+ * @param string $p
+ * @return bool
+ */
+ function __isset($p) {
+ return isset($this->data[$p]) || isset($this->cell[$p]);
+ }
+
+ /**
+ * Get the parent row
+ * @see \pq\Gateway\Table::by()
+ * @param mixed $foreign table (name)
+ * @param string $ref
+ * @return \pq\Gateway\Rowset
+ */
+ function ofWhich($foreign, $ref = null) {
+ if (!($foreign instanceof Table)) {
+ $foreign = forward_static_call(
+ [get_class($this->getTable()), "resolve"],
+ $foreign
+ );
+ }
+ return $foreign->by($this, $ref);
+ }
+
+ /**
+ * Get child rows of this row by foreign key
+ * @see \pq\Gateway\Table::of()
+ * @param mixed $foreign table (name)
+ * @param string $order
+ * @param int $limit
+ * @param int $offset
+ * @return \pq\Gateway\Rowset
+ */
+ function allOf($foreign, $ref = null, $order = null, $limit = 0, $offset = 0) {
+ if (!($foreign instanceof Table)) {
+ $foreign = forward_static_call(
+ [get_class($this->getTable()), "resolve"],
+ $foreign
+ );
+ }
+ return $foreign->of($this, $ref, $order, $limit, $offset);