X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fpq%2FGateway%2FCell.php;h=3667854430f1848fe844040457c4aff3e20d93fa;hb=0a6fac6b260383a6abea76804410273c7b8b630b;hp=efa5fcbb3cd1154ecd99321bdddaf9e093a7a5c2;hpb=dc87da9c4ec52918e34f2e43eac3014f0f99a8bc;p=m6w6%2Fpq-gateway diff --git a/lib/pq/Gateway/Cell.php b/lib/pq/Gateway/Cell.php index efa5fcb..3667854 100644 --- a/lib/pq/Gateway/Cell.php +++ b/lib/pq/Gateway/Cell.php @@ -4,18 +4,13 @@ namespace pq\Gateway; use \pq\Query\Expressible; -class Cell extends Expressible +class Cell extends Expressible implements \ArrayAccess { /** * @var \pq\Gateway\Row */ protected $row; - /** - * @var string - */ - protected $name; - /** * @var bool */ @@ -28,9 +23,8 @@ class Cell extends Expressible * @param bool $dirty */ function __construct(Row $row, $name, $data, $dirty = false) { - parent::__construct($data); + parent::__construct($name, $data); $this->row = $row; - $this->name = $name; $this->dirty = $dirty; } @@ -39,7 +33,7 @@ class Cell extends Expressible * @return bool */ function isDirty() { - return $this->dirty; + return (bool) $this->dirty; } /** @@ -48,8 +42,18 @@ class Cell extends Expressible * @return \pq\Gateway\Cell */ function set($data) { - parent::set($data); - $this->dirty = true; + if ($data instanceof Row) { + $this->row->__set($data->getTable()->getName() . "_id", $data->id); + $this->row->__unset($this->name); + return $this; + } + if ($data instanceof Cell) { + $data = $data->get(); + } + if ($this->data !== $data) { + parent::set($data); + $this->dirty = true; + } return $this; } @@ -60,9 +64,45 @@ class Cell extends Expressible * @return \pq\Gateway\Cell */ function mod($data, $op = null) { + if (is_string($data)) { + $data = $this->row->getTable()->getConnection()->quote($data); + } parent::mod($data, $op); $this->dirty = true; return $this; } + function offsetGet($o) { + if (isset($this->data) && !is_array($this->data)) { + throw new \UnexpectedValueException("Cell data is not an array"); + } + return $this->data[$o]; + } + + function offsetSet($o, $v) { + if (isset($this->data) && !is_array($this->data)) { + throw new \UnexpectedValueException("Cell data is not an array"); + } + if (isset($o)) { + $this->data[$o] = $v; + } else { + $this->data[] = $v; + } + $this->dirty = true; + } + + function offsetExists($o) { + if (isset($this->data) && !is_array($this->data)) { + throw new \UnexpectedValueException("Cell data is not an array"); + } + return isset($this->data[$o]); + } + + function offsetUnset($o) { + if (isset($this->data) && !is_array($this->data)) { + throw new \UnexpectedValueException("Cell data is not an array"); + } + unset($this->data[$o]); + $this->dirty = true; + } }