protected function modelToBindSource(DataModel $model)
{
$data = $model->toArray();
$relations = $model->getRelations()->getRelationNames();
$relationTypes = $model->getRelations()->getRelationTypes();
$relationTypes = array_map(function ($x) {
return ltrim($x, '\\');
}, $relationTypes);
$relationTypes = array_flip($relationTypes);
if (is_array($relations) && count($relations)) {
foreach ($relations as $relationName) {
$rel = $model->getRelations()->getRelation($relationName);
$class = get_class($rel);
if (!isset($relationTypes[$class])) {
continue;
}
if ($relationTypes[$class] != 'hasOne') {
continue;
}
$relData = $model->{$relationName};
if (!$relData instanceof DataModel) {
continue;
}
$relDataArray = $relData->toArray();
if (empty($relDataArray) || !is_array($relDataArray)) {
continue;
}
foreach ($relDataArray as $k => $v) {
$data[$relationName . '.' . $k] = $v;
}
}
}
return $data;
}