/** * save * * @param Data $data * * @return mixed|Data */ public function save(Data $data) { $data->title = trim($data->title); $data->alias = $data->alias ?: OutputFilter::stringURLUnicodeSlug($data->title); if (!$data->alias) { $data->alias = OutputFilter::stringURLSafe((new Date())->toISO8601()); } $mapper = new DataMapper('posts'); // Increment alias $conditions = ['alias' => $data->alias, 'blog' => $data->blog]; $conditions[] = 'id != ' . ($data->id ?: -1); while ($mapper->findOne($conditions)->notNull()) { $conditions['alias'] = $data->alias = String::increment($data->alias, String::INCREMENT_STYLE_DASH); } $data = $mapper->saveOne($data); // Save Categories $categories = $data->category ?: []; $dataSet = []; foreach ($categories as $k => $cat) { $dataSet[$k]['category'] = $cat; $dataSet[$k]['post'] = $data->id; } (new DataMapper('category_post_maps'))->flush($dataSet, ['post' => $data->id]); return $data; }