改进Model类的toArray方法 支持关联模型输出数组

This commit is contained in:
thinkphp
2016-04-20 21:33:24 +08:00
parent 87a128f231
commit a5505c000c

View File

@@ -119,7 +119,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
// JsonSerializable // JsonSerializable
public function jsonSerialize() public function jsonSerialize()
{ {
return $this->data; return $this->toArray();
} }
// ArrayAccess // ArrayAccess
@@ -178,7 +178,21 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
*/ */
public function toArray() public function toArray()
{ {
return !empty($this->data) ? $this->data : []; $item = [];
foreach ($this->data as $key => $val) {
if ($val instanceof Model) {
$item[$key] = $val->toArray();
} elseif (is_array($val) && $val[0] instanceof Model) {
$data = [];
foreach ($val as $k => $value) {
$data[$k] = $value->toArray();
}
$item[$key] = $data;
} elseif (is_scalar($val)) {
$item[$key] = $val;
}
}
return !empty($item) ? $item : [];
} }
/** /**
@@ -912,7 +926,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
public function __toString() public function __toString()
{ {
return json_encode($this->data); return json_encode($this->toArray());
} }
/** /**