/** * @param array $fields * * @return Category */ public static function firstOrCreateEncrypted(array $fields) { // everything but the name: $query = Category::orderBy('id'); $search = $fields; unset($search['name']); foreach ($search as $name => $value) { $query->where($name, $value); } $set = $query->get(['categories.*']); /** @var Category $category */ foreach ($set as $category) { if ($category->name == $fields['name']) { return $category; } } // create it! $category = Category::create($fields); return $category; }