在App/Admin/Controllers/ProductsController的form方法中添加:
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
...
$form->hasMany('images','商品图片设置',function (Form\NestedForm $form){
$form->multipleImage('image_url','商品详情图片')
->sortable()
->removable()
->required()
->options([
'dropZoneEnabled' => true, // 该参数允许拖拽上传
'browseOnZoneClick' => true, // 该参数允许点击上传
'slugCallback' => false, // 该参数是重新选择后依旧保留之前的,并且不会重复显示
'uploadUrl' => '#', // 异步上传
'showUpload' => false, // 是否显示上传按钮
'layoutTemplates' => ['actionUpload' => ''], // 该参数要与uploadUrl结合使用,目的 为了不是异步上传的,但是能删掉多张图片中的某一张
'maxFileCount' => 5, // 该参数是最多只能选择多少张
]);
});
...
}
?>
在ProductImage模型中需要对新增与查询的数据进行设置:
public function getImageUrlAttribute($value)
{
return json_decode($value,true);
}
public function setImageUrlAttribute($image)
{
if (is_array($image)) {
$this->attributes['image_url'] = json_encode($image);
}
}
?>
然后在laravel-admin中进行访问:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IEjPP5iM-1598578433972)(assets/markdown-img-paste-20200808214327240.png)]
注意此处因为laravel-admin组件存在bug,新增的数据只能获取到一张图片
商品属性是一组结构化的数据,用键值对的方式将商品的一系列特征展示给用户,如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9fVneLo-1598578433974)(assets/markdown-img-paste-2020080821494316.png)]
这样可以让用户更容易了解该商品的一些数据,同时也可以通过这些属性来搜索、筛选商品
商品属性表
字段名称 | 描述 | 类型 |
---|---|---|
id | 自增长 ID | unsigned big int |
product_id | 商品 ID | unsigned big int, null |
name | 属性名称 | varchar |
value | 属性值 | varchar |
php artisan make:model Models/ProductProperty
调整模型代码:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ProductProperty extends Model
{
protected $fillable = ['name', 'value'];
// 没有 created_at 和 updated_at 字段
public $timestamps = false;
public function product()
{
return $this->belongsTo(Product::class);
}
}
?>
以及在 Product 模型中加入关联关系:
public function properties()
{
return $this->hasMany(ProductProperty::class);
}
?>
接下来我们需要在商品的管理后台加上商品属性相关的表单,由于商品属性是一个不同类型商品都通用的参数,因此需要在 ProductsController 的form中添加:
public function form
{
...
// 放在 SKU 下面