使用 Laravel Eloquent 模型 修改器 实现商城产品多语言字段存储

需求

实现 产品标题和产品详情 多语言字段存储

表设计

CREATE TABLE `product` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '产品id',
  `title` text COMMENT '产品标题',
  `details` text COMMENT '产品详情',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL COMMENT '更新时间',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除时间'
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COMMENT='产品表';

post 字段保存数据

{
    "title":{
        "en": "This is English filed",
        "zh_CN": "这是中文字段"
    }
}

控制器

app\Http\Controllers\ProductController.php

namespace App\Http\Controllers;
use App\Models\Product;

class ProductController extends Controller
{
    /**
     * 产品保存
     * 
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $product = new Product();
        $product->fill($data);
        $product->save();
    }
}

模型

app\Models\Product.php

<?php

namespace App\Models;

class Product extends Model
{
    /**
     * title 修改器
     */
    public function setTitleAttribute($value)
    {
        if (is_array($value))
        {
            //转换成json
            $value = json_encode($value);
        }
        $this->attributes['title'] = $value;
    }
    
    /**
     * title 访问器
     */
    public function getTitleAttribute($value)
    {
        if (!$value)
        {
            return $value;
        }
        $lang_front = request('locale');//前台传入的语言编码
        $arr = json_decode($value, true);//把json数据转成array
        if (!$arr)
        {
            return $value;
        }
        return $arr[$lang_front] ?? array_shift($arr);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值