我有产品模型,它有面包在旅行者号和一切都是好的。如果null == main else int(出版商的ID),则产品具有publisher_id列。我想创建多个浏览刀片,但其中一个是默认voyager刀片,另一个where(′ publisher_id ′,′!= ′,null)要显示。如何创建路由?谢谢你的好意。
ux6nzvsh1#
固定资源路由路径::资源('产品/索引/出版商',VoyagerProductPublisherController::类);路由::资源('产品/索引/不接受',VoyagerProductPublisherNotAcceptController::类);然后在控制器索引函数中写入查询
public function index(Request $request) { // GET THE SLUG, ex. 'posts', 'pages', etc. $slug = \request()->segment(3); // GET THE DataType based on the slug $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first(); // Check permission $getter = 'paginate'; $search = (object)['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')]; $searchNames = []; if ($dataType->server_side) { $searchNames = $dataType->browseRows->mapWithKeys(function ($row) { return [$row['field'] => $row->getTranslatedAttribute('display_name')]; }); } $orderBy = $request->get('order_by', $dataType->order_column); $sortOrder = $request->get('sort_order', $dataType->order_direction); $usesSoftDeletes = false; $showSoftDeleted = false; // Next Get or Paginate the actual content from the MODEL that corresponds to the slug DataType if (strlen($dataType->model_name) != 0) { $model = app($dataType->model_name); $query = $model::select($dataType->name . '.*'); if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope' . ucfirst($dataType->scope))) { $query->{$dataType->scope}(); } // Use withTrashed() if model uses SoftDeletes and if toggle is selected if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) { $usesSoftDeletes = true; if ($request->showSoftDeleted && $request->showSoftDeleted == 1) { $showSoftDeleted = true; $query = $query->onlyTrashed(); } } // If a column has a relationship associated with it, we do not want to show that field $this->removeRelationshipField($dataType, 'browse'); if ($search->value != '' && $search->key && $search->filter) { $search_filter = ($search->filter == 'equals') ? '=' : 'LIKE'; $search_value = ($search->filter == 'equals') ? $search->value : '%' . $search->value . '%'; $searchField = $dataType->name . '.' . $search->key; if ($row = $this->findSearchableRelationshipRow($dataType->rows->where('type', 'relationship'), $search->key)) { $query->whereIn( $searchField, $row->details->model::where($row->details->label, $search_filter, $search_value)->pluck('id')->toArray() ); } else { if ($dataType->browseRows->pluck('field')->contains($search->key)) { $query->where($searchField, $search_filter, $search_value); } } } $row = $dataType->rows->where('field', $orderBy)->firstWhere('type', 'relationship'); if ($orderBy && (in_array($orderBy, $dataType->fields()) || !empty($row))) { $querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'desc'; if (!empty($row)) { $query->select([ $dataType->name . '.*', 'joined.' . $row->details->label . ' as ' . $orderBy, ])->leftJoin( $row->details->table . ' as joined', $dataType->name . '.' . $row->details->column, 'joined.' . $row->details->key, ); } $dataTypeContent = call_user_func([ $query->orderBy($orderBy, $querySortOrder)->where('publisher_id','!=',null), $getter, ]); } elseif ($model->timestamps) { $dataTypeContent = call_user_func([$query->latest($model::CREATED_AT)->where('publisher_id','!=',null), 'paginate'], request()->perPage ?? 10); } else { $dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(), 'DESC')->where('publisher_id','!=',null), $getter]); } // Replace relationships' keys for labels and create READ links if a slug is provided. $dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType); } else { // If Model doesn't exist, get data from table name $dataTypeContent = call_user_func([DB::table($dataType->name)->where('publisher_id','!=',null), $getter]); $model = false; } // Check if BREAD is Translatable $isModelTranslatable = is_bread_translatable($model); // Eagerload Relations $this->eagerLoadRelations($dataTypeContent, $dataType, 'browse', $isModelTranslatable); // Check if server side pagination is enabled $isServerSide = isset($dataType->server_side) && $dataType->server_side; // Check if a default search key is set $defaultSearchKey = $dataType->default_search_key ?? null; // Actions $actions = []; if (!empty($dataTypeContent->first())) { foreach (Voyager::actions() as $action) { $action = new $action($dataType, $dataTypeContent->first()); if ($action->shouldActionDisplayOnDataType()) { $actions[] = $action; } } } //Define showCheckboxColumn $showCheckboxColumn = false; if (Auth::guard('admin')->user()->can('delete', app($dataType->model_name))) { $showCheckboxColumn = true; } else { foreach ($actions as $action) { if (method_exists($action, 'massAction')) { $showCheckboxColumn = true; } } } // Define orderColumn $orderColumn = []; if ($orderBy) { $index = $dataType->browseRows->where('field', $orderBy)->keys()->first() + ($showCheckboxColumn ? 1 : 0); $orderColumn = [[$index, $sortOrder ?? 'desc']]; } // Define list of columns that can be sorted server side $sortableColumns = $this->getSortableColumns($dataType->browseRows); $view = 'voyager::bread.publisher'; if (view()->exists("voyager::$slug.publisher")) { $view = "voyager::$slug.publisher"; } return Voyager::view($view, compact( 'actions', 'dataType', 'dataTypeContent', 'isModelTranslatable', 'search', 'orderBy', 'orderColumn', 'sortableColumns', 'sortOrder', 'searchNames', 'isServerSide', 'defaultSearchKey', 'usesSoftDeletes', 'showSoftDeleted', 'showCheckboxColumn' )); }
//在控制器2中
public function index(Request $request) { // GET THE SLUG, ex. 'posts', 'pages', etc. $slug = \request()->segment(3); // GET THE DataType based on the slug $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first(); // Check permission $getter = 'paginate'; $search = (object)['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')]; $searchNames = []; if ($dataType->server_side) { $searchNames = $dataType->browseRows->mapWithKeys(function ($row) { return [$row['field'] => $row->getTranslatedAttribute('display_name')]; }); } $orderBy = $request->get('order_by', $dataType->order_column); $sortOrder = $request->get('sort_order', $dataType->order_direction); $usesSoftDeletes = false; $showSoftDeleted = false; // Next Get or Paginate the actual content from the MODEL that corresponds to the slug DataType if (strlen($dataType->model_name) != 0) { $model = app($dataType->model_name); $query = $model::select($dataType->name . '.*'); if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope' . ucfirst($dataType->scope))) { $query->{$dataType->scope}(); } // Use withTrashed() if model uses SoftDeletes and if toggle is selected if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) { $usesSoftDeletes = true; if ($request->showSoftDeleted && $request->showSoftDeleted == 1) { $showSoftDeleted = true; $query = $query->onlyTrashed(); } } // If a column has a relationship associated with it, we do not want to show that field $this->removeRelationshipField($dataType, 'browse'); if ($search->value != '' && $search->key && $search->filter) { $search_filter = ($search->filter == 'equals') ? '=' : 'LIKE'; $search_value = ($search->filter == 'equals') ? $search->value : '%' . $search->value . '%'; $searchField = $dataType->name . '.' . $search->key; if ($row = $this->findSearchableRelationshipRow($dataType->rows->where('type', 'relationship'), $search->key)) { $query->whereIn( $searchField, $row->details->model::where($row->details->label, $search_filter, $search_value)->pluck('id')->toArray() ); } else { if ($dataType->browseRows->pluck('field')->contains($search->key)) { $query->where($searchField, $search_filter, $search_value); } } } $row = $dataType->rows->where('field', $orderBy)->firstWhere('type', 'relationship'); if ($orderBy && (in_array($orderBy, $dataType->fields()) || !empty($row))) { $querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'desc'; if (!empty($row)) { $query->select([ $dataType->name . '.*', 'joined.' . $row->details->label . ' as ' . $orderBy, ])->leftJoin( $row->details->table . ' as joined', $dataType->name . '.' . $row->details->column, 'joined.' . $row->details->key, ); } $dataTypeContent = call_user_func([ $query->orderBy($orderBy, $querySortOrder)->where('accept',0), $getter, ]); } elseif ($model->timestamps) { $dataTypeContent = call_user_func([$query->latest($model::CREATED_AT)->where('accept',0), 'paginate'], request()->perPage ?? 10); } else { $dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(), 'DESC')->where('accept',0), $getter]); } // Replace relationships' keys for labels and create READ links if a slug is provided. $dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType); } else { // If Model doesn't exist, get data from table name $dataTypeContent = call_user_func([DB::table($dataType->name)->where('accept',0), $getter]); $model = false; } // Check if BREAD is Translatable $isModelTranslatable = is_bread_translatable($model); // Eagerload Relations $this->eagerLoadRelations($dataTypeContent, $dataType, 'browse', $isModelTranslatable); // Check if server side pagination is enabled $isServerSide = isset($dataType->server_side) && $dataType->server_side; // Check if a default search key is set $defaultSearchKey = $dataType->default_search_key ?? null; // Actions $actions = []; if (!empty($dataTypeContent->first())) { foreach (Voyager::actions() as $action) { $action = new $action($dataType, $dataTypeContent->first()); if ($action->shouldActionDisplayOnDataType()) { $actions[] = $action; } } } //Define showCheckboxColumn $showCheckboxColumn = false; if (Auth::guard('admin')->user()->can('delete', app($dataType->model_name))) { $showCheckboxColumn = true; } else { foreach ($actions as $action) { if (method_exists($action, 'massAction')) { $showCheckboxColumn = true; } } } // Define orderColumn $orderColumn = []; if ($orderBy) { $index = $dataType->browseRows->where('field', $orderBy)->keys()->first() + ($showCheckboxColumn ? 1 : 0); $orderColumn = [[$index, $sortOrder ?? 'desc']]; } // Define list of columns that can be sorted server side $sortableColumns = $this->getSortableColumns($dataType->browseRows); $view = 'voyager::bread.notaccept'; if (view()->exists("voyager::$slug.notaccept")) { $view = "voyager::$slug.notaccept"; } return Voyager::view($view, compact( 'actions', 'dataType', 'dataTypeContent', 'isModelTranslatable', 'search', 'orderBy', 'orderColumn', 'sortableColumns', 'sortOrder', 'searchNames', 'isServerSide', 'defaultSearchKey', 'usesSoftDeletes', 'showSoftDeleted', 'showCheckboxColumn' )); }
谢谢观赏。
1条答案
按热度按时间ux6nzvsh1#
固定资源路由
路径::资源('产品/索引/出版商',VoyagerProductPublisherController::类);路由::资源('产品/索引/不接受',VoyagerProductPublisherNotAcceptController::类);
然后在控制器索引函数中写入查询
//在控制器2中
谢谢观赏。