如何解决试图获取非对象的属性“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 举报,一经查实,本站将立刻删除。