/** * Create a new tag if valid or return existing one * * @param string $name * @param null|Tag $parent * * @return bool|$this */ public function validOrCreate($name, Tag $parent = null) { $group = $parent === null ? true : false; $tag = $this->where('name', '=', $name)->first(); if ($tag && $tag->group != $group) { return false; } if (!$tag) { $tag = new Tag(); $tag->name = $name; $tag->group = $group; if (!is_null($parent)) { $tag->parent_id = $parent->id; $tag->setRelation('parent', $parent); } $tag->save(); } return $tag; }