[唯一答案]laravel-admin中modal使用解析

      2022年03月20日 星期日 11:21:15     laravel      laravel   laravel-admin    

先看模型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());
        });

暂无评论

发表评论