[唯一答案]laravel-admin中modal使用解析
先看模型ProductCategory,和Product;ProductCategory->Product是一对多关系,所以设置他们
//ProductCategory public function products() { return $this->hasMany('App\Models\Product','category_id','id'); } //Product public function product_category(){ return $this->belongsTo('App\Models\ProductCategory', 'category_id', 'id'); }
然后来到Admin下的控制器ProductCategoryController
protected function grid() { //.... //模态框使用 $grid->column('name', 'Name')->modal('商品', function ($model) { //dump($model->products); $products = $model->products->map(function ($product) { return $product->only(['id', 'name']); }); dump($products->toArray()); echo "---"; //return new Product(['ID', '内容'], $products->toArray()); }); //... return $grid; }
怎么使用这个不细说。
直接分析;这里dump($model->products);返回的是一个关联查询后的结果,也就是说$model->products其实指向的就是关联查询的结果了;之前一直学官网文档$model->products(),一直没效果没数据获取出来;原来就是”()”的锅
来分别看一下
//dump($model->products()):返回-啥都开不到,数据藏得很深 Illuminate\Database\Eloquent\Relations\HasMany {#1788 ▼ #foreignKey: "product.category_id" #localKey: "id" #query: Illuminate\Database\Eloquent\Builder {#1794 ▶} #parent: App\Models\ProductCategory {#1452 ▶} #related: App\Models\Product {#1799 ▶} } //dump($model->products()):返回-直观的可以看到3条数据返回;最终数据比如在#items[0]->attributes Illuminate\Database\Eloquent\Collection {#1773 ▼ #items: array:3 [▼ 0 => App\Models\Product {#1772 ▶} 1 => App\Models\Product {#1771 ▶} 2 => App\Models\Product {#1770 ▶} ] #escapeWhenCastingToString: false }
然后看着可以了,确实还是不行….续更。。
然后发现啥也不是,估计之前就可以出来的,但是return new Table这个是个什么东西?一直报错说没有Table这个控制器,所以一直以为文档里Table说的是哪个模型的名字,原来只要在开头加上use Encore\Admin\Widgets\Table;对,就是这么简单,这么蛋疼….
关于我是怎么发现要use Encore\Admin\Widgets\Table;的是: 觉得走投无路了,百度了下如何自定义表单,然后就被我找到这个而且发现了里面代码开头写上了use Encore\Admin\Widgets\Table;…..使劲锉它
最后看下完整代码
use Encore\Admin\Widgets\Table; //一定要use一定要use一定要use $grid->column('name', 'Name')->modal('商品', function ($model) { $products = $model->products()->take(10)->get()->map(function ($product) { return $product->only(['id', 'name','cover_img']); }); return new Table(['ID', '名称','封面'], $products->toArray()); });
快捷登陆