试图获取非对象的属性“model_name”

问题描述

所以当我尝试使用 voyager 主题时出现此错误,我想使用 voyager 的主题,因为页面在管理端,所以我想让它统一。
我意识到我还需要扩展视图,所以我创建了这个控制器

<?PHP

namespace App\Http\Controllers\Admin;

use App\Models\Toko;
use App\Models\SubOrder;
use Illuminate\Http\Request;
use TCG\Voyager\Facades\Voyager;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use RealRashid\SweetAlert\Facades\Alert;
use Illuminate\Database\Eloquent\SoftDeletes;
use TCG\Voyager\Database\Schema\SchemaManager;
use TCG\Voyager\Http\Controllers\VoyagerBaseController;

class OrderController extends VoyagerBaseController
{
    //***************************************
    //               ____
    //              |  _ \
    //              | |_) |
    //              |  _ <
    //              | |_) |
    //              |____/
    //
    //      browse our Data Type (B)READ
    //
    //****************************************

    public function index(Request $request)
    {
        // GET THE SLUG,ex. 'posts','pages',etc.
        $slug = $this->getSlug($request);

        // GET THE DataType based on the slug
        $dataType = Voyager::model('DataType')->where('slug','=',$slug)->first();

        // Check permission
        $this->authorize('browse',app($dataType->model_name));

        $getter = $dataType->server_side ? 'paginate' : 'get';

        $search = (object) ['value' => $request->get('s'),'key' => $request->get('key'),'filter' => $request->get('filter')];

        $searchNames = [];
        if ($dataType->server_side) {
            $searchable = SchemaManager::describeTable(app($dataType->model_name)->getTable())->pluck('name')->toArray();
            $daTarow = Voyager::model('DaTarow')->whereDataTypeId($dataType->id)->get();
            foreach ($searchable as $key => $value) {
                $field = $daTarow->where('field',$value)->first();
                $displayName = ucwords(str_replace('_',' ',$value));
                if ($field !== null) {
                    $displayName = $field->getTranslatedAttribute('display_name');
                }
                $searchNames[$value] = $displayName;
            }
        }

        $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);

            if ($dataType->scope && $dataType->scope != '' && method_exists($model,'scope'.ucfirst($dataType->scope))) {
                $query = $model->{$dataType->scope}();
            } else {
                $query = $model::select('*');
            }

            // Query menampilkan hanya toko pedagang

            if(auth()->user()->hasRole('pedagang')) {

                $query->where('user_id',auth()->id());

            }

            // Use withTrashed() if model uses SoftDeletes and if toggle is selected
            if ($model && in_array(SoftDeletes::class,class_uses_recursive($model)) && Auth::user()->can('delete',app($dataType->model_name))) {
                $usesSoftDeletes = true;

                if ($request->get('showSoftDeleted')) {
                    $showSoftDeleted = true;
                    $query = $query->withTrashed();
                }
            }

            // 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.'%';
                $query->where($search->key,$search_filter,$search_value);
            }

            if ($orderBy && in_array($orderBy,$dataType->fields())) {
                $querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'desc';
                $dataTypeContent = call_user_func([
                    $query->orderBy($orderBy,$querySortOrder),$getter,]);
            } elseif ($model->timestamps) {
                $dataTypeContent = call_user_func([$query->latest($model::CREATED_AT),$getter]);
            } else {
                $dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(),'DESC'),$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),$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::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']];
        }

        $view = 'voyager::bread.browse';

        if (view()->exists("voyager::$slug.browse")) {
            $view = "voyager::$slug.browse";
        }

        // $order = SubOrder::class;

        // $items = $order->items;

        $tokoId = Toko::select('id')->firstWhere('user_id',auth()->id())->id;

        // $orders = SubOrder::where('toko_id',$tokoId)->orderBy('created_at','desc')->get();

        $orders = SubOrder::with('items')->where('toko_id','desc')->get();

        return view('sellers.order.index',compact(
            // 'items','orders','actions','dataType','dataTypeContent','isModelTranslatable','search','orderBy','orderColumn','sortOrder','searchNames','isServerSide','defaultSearchKey','usesSoftDeletes','showSoftDeleted','showCheckBoxColumn'
        ));
    }

    // public function show(SubOrder $order)
    // {
    //     $items = $order->items;

    //     return view('sellers.order.show',compact('items'));
    // }

    public function markTolak(SubOrder $suborder)
    {
        $suborder->status = 'gagal';
        $suborder->save();

        Alert::info('Order di Proses!','Order ditandai proses!');

        return redirect('/seller/orders')->withMessage('Order ditandai proses');
    }

    public function markProses(SubOrder $suborder)
    {
        $suborder->status = 'proses';
        $suborder->save();

        Alert::info('Order di Proses!','Order ditandai proses!');

        return redirect('/seller/orders')->withMessage('Order ditandai proses');
    }

    public function markDelivered(SubOrder $suborder)
    {
        $suborder->status = 'selesai';
        $suborder->save();

        // Check all sub order complete
        $pendingSubOrders = $suborder->order->subOrders()->where('status','!=','selesai')->count();

        if($pendingSubOrders == 0) {
            $suborder->order()->update(['status'=>'selesai']);
        }

        Alert::success('Order Selesai!','Order ditandai selesai!');

        return redirect('/seller/orders')->withMessage('Order ditandai selesai');
    }
}

它表明错误来自第 42 行,它检查权限并找不到“model_name”。请帮忙
或者,是否还有其他使用模板的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)