public function getData(\Eccube\Entity\Csv $Csv, $entity)
{
// エンティティ名が一致するかどうかチェック.
$csvEntityName = str_replace('\\\\', '\\', $Csv->getEntityName());
$entityName = str_replace('\\\\', '\\', get_class($entity));
if ($csvEntityName !== $entityName) {
$entityName = str_replace('DoctrineProxy\\__CG__\\', '', $entityName);
if ($csvEntityName !== $entityName) {
return null;
}
}
// カラム名がエンティティに存在するかどうかをチェック.
if (!$entity->offsetExists($Csv->getFieldName())) {
return null;
}
// データを取得.
$data = $entity->offsetGet($Csv->getFieldName());
// one to one の場合は, dtb_csv.referece_field_nameと比較し, 合致する結果を取得する.
if ($data instanceof \Eccube\Entity\AbstractEntity) {
if (EntityUtil::isNotEmpty($data)) {
return $data->offsetGet($Csv->getReferenceFieldName());
}
} elseif ($data instanceof \Doctrine\Common\Collections\Collection) {
// one to manyの場合は, カンマ区切りに変換する.
$array = array();
foreach ($data as $elem) {
if (EntityUtil::isNotEmpty($elem)) {
$array[] = $elem->offsetGet($Csv->getReferenceFieldName());
}
}
return implode($this->config['csv_export_multidata_separator'], $array);
} elseif ($data instanceof \DateTime) {
// datetimeの場合は文字列に変換する.
return $data->format($this->config['csv_export_date_format']);
} else {
// スカラ値の場合はそのまま.
return $data;
}
return null;
}