public function listProductOption()
 {
     if (!Request::ajax()) {
         return App::abort(404);
     }
     $start = Input::has('start') ? (int) Input::get('start') : 0;
     $length = Input::has('length') ? Input::get('length') : 10;
     $search = Input::has('search') ? Input::get('search') : [];
     $productOptions = ProductOption::select('options.id', 'options.name', 'options.key', 'option_group_id', 'option_groups.name as option_group_name')->leftJoin('option_groups', 'options.option_group_id', '=', 'option_groups.id');
     if (!empty($search)) {
         foreach ($search as $key => $value) {
             if (empty($value)) {
                 continue;
             }
             if ($key == 'option_group_id') {
                 $productOptions->where($key, (int) $value);
             } else {
                 $value = ltrim(rtrim($value));
                 $productOptions->where($key, 'like', '%' . $value . '%');
             }
         }
     }
     $order = Input::has('order') ? Input::get('order') : [];
     if (!empty($order)) {
         $columns = Input::has('columns') ? Input::get('columns') : [];
         foreach ($order as $value) {
             $column = $value['column'];
             if (!isset($columns[$column]['name']) || empty($columns[$column]['name'])) {
                 continue;
             }
             $productOptions->orderBy('options.' . $columns[$column]['name'], $value['dir'] == 'asc' ? 'asc' : 'desc');
         }
     }
     $count = $productOptions->count();
     if ($length > 0) {
         $productOptions = $productOptions->skip($start)->take($length);
     }
     $arrOptions = $productOptions->get()->toArray();
     $arrReturn = ['draw' => Input::has('draw') ? Input::get('draw') : 1, 'recordsTotal' => ProductOption::count(), 'recordsFiltered' => $count, 'data' => []];
     if (!empty($arrOptions)) {
         foreach ($arrOptions as $option) {
             $arrReturn['data'][] = array(++$start, $option['id'], $option['name'], $option['key'], $option['option_group_id'], is_null($option['option_group_name']) ? '' : $option['option_group_name']);
         }
     }
     $response = Response::json($arrReturn);
     $response->header('Content-Type', 'application/json');
     return $response;
 }