laravel 多航行器浏览器叶片

y1aodyip  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(149)

我有产品模型,它有面包在旅行者号和一切都是好的。
如果null == main else int(出版商的ID),则产品具有publisher_id列。
我想创建多个浏览刀片,但其中一个是默认voyager刀片,另一个where(′ publisher_id ′,′!= ′,null)要显示。
如何创建路由?
谢谢你的好意。

ux6nzvsh

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'
    ));
}

谢谢观赏。

相关问题