需求
实现 产品标题和产品详情 多语言字段存储
表设计
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);
}
}