+
+class TestModel implements JsonSerializable {
+ private $id, $created, $counter, $number, $data, $list, $prop;
+ private $ref1, $ref2;
+
+ function jsonSerialize() {
+ return get_object_vars($this);
+ }
+
+ function __get($p) {
+ return $this->$p;
+ }
+
+ function __set($p, $v) {
+ $this->$p = $v;
+ }
+
+ /**
+ * @param Mapper $mapper
+ * @return MapInterface
+ */
+ static function mapAs(Mapper $mapper) {
+ return new Map(
+ __CLASS__,
+ new Table("test"),
+ $mapper->mapField("id"),
+ $mapper->mapField("created"),
+ $mapper->mapField("counter"),
+ $mapper->mapField("number"),
+ $mapper->mapField("data"),
+ $mapper->mapField("list"),
+ $mapper->mapField("prop"),
+ $mapper->mapAll("ref1")->to(RefTestModel::class)->by("test"),
+ $mapper->mapAll("ref2")->to(RefTestModel::class)->by("another_test")
+ );
+ }
+}
+
+class RefTestModel
+{
+ private $pk1, $pk2;
+ private $one, $two;
+
+ function __get($p) {
+ return $this->$p;
+ }
+
+ function __set($p, $v) {
+ $this->$p = $v;
+ }
+
+ static function mapAs($mapper) {
+ return new Map(
+ __CLASS__,
+ new Table("reftest"),
+ $mapper->mapField("pk1", "test_id"),
+ $mapper->mapField("pk2", "another_test_id"),
+ $mapper->mapRef("one")->to(TestModel::class)->by("test"),
+ $mapper->mapRef("two")->to(TestModel::class)->by("another_test")
+ );
+ }
+}
\ No newline at end of file