/**
  * Create New Item on Menu
  *
  * @param MenuItem $item new menuItem object to add at menu
  *
  * @return MenuItem
  * @throws Exception
  */
 public function insertItem(MenuItem $item)
 {
     $cnt = 0;
     $result = false;
     while (!$result && $cnt++ < $this->DUPLICATE_RETRY_CNT) {
         $item->id = $this->generateNewId();
         try {
             $result = $this->conn->table($this->nodeTable)->insert($item->getAttributes());
         } catch (QueryException $e) {
             $sqlState = $e->errorInfo[0];
             if ($sqlState === "23000") {
                 $result = false;
             } else {
                 throw $e;
             }
         }
     }
     if ($result) {
         return $item;
     }
     throw new CanNotCreateItemException();
 }