/**
  * Insert menu item
  *
  * @param MenuItem $item menu item instance
  * @return MenuItem
  */
 public function insertItem(MenuItem $item)
 {
     $cnt = 0;
     while ($cnt++ < static::DUPLICATE_RETRY_CNT) {
         try {
             $item->{$item->getKeyName()} = $this->generateNewId();
             $item->save();
             $item->menu->increment($item->menu->getCountName());
             break;
         } catch (QueryException $e) {
             if ($e->getCode() != "23000") {
                 throw $e;
             }
         }
     }
     return $item;
 }