二十一:记录商品访问日志、模型保存的3种姿势
一:生成日志表实体

php bin/swoft entity:create --table=products_view --pool=db.pool --path=@app/Models
二:模型(实体)保存的三种姿势
public function prod_detail(int $id)
{
//为了获取请求参数和响应数据的方便,我们做了Request和Response公共函数的封装;
//$p=NewProduct($id,"测试商品-链式调用");
//为了代码的简洁,封装了isGet和isPost全局函数;
$myRequest=new MyRequest();
$resultInfo=$myRequest->if(isGet())->then(function () use ($id){
$product=Products::find($id);
if($product)
{
$product->increment('prod_click');
//三种加入的方法
/*
//(1):增加商品访问记录,实体属性方法加入
$products_view=ProductsView::new();
$products_view->setProdId($id);
$products_view->setViewIp(ip());
$products_view->setViewNum(1);
$products_view->setViewDate(date('Y-m-d'));
$products_view->save();
return $product;
*/
/* //(2):增加商品访问记录,实体数组方法方法加入
$pviewData=[
"prod_id"=>$id,
"view_ip"=>ip(),
"view_num"=>1,
"view_date"=>date("Y-m-d"),
];
$products_view=ProductsView::new($pviewData)->save();
*/
//(3):如果有重复数据进行+1操作;
//如果更新或者创建的时候还需要把数据取出来,则使用updateOrCreate(),返回模型;
//如果更新或者创建的时候不需要把数据取出来,则使用updateOrInsert(),返回bool类型;
ProductsView::updateOrInsert(//里面有两个数组
["prod_id"=>$id,"view_ip"=>ip(),"view_date"=>date("Y-m-d")],//第一个数组判断哪些是重复的
//["view_num"=>"view_num+1"]// 这种累加方式是不对的;要使用Db::raw()的方式;
["view_num"=>Db::raw("view_num+1")]
);
return $product;
}
})->if(isPost())->then(function () use($id)
{
//\validate(request()->post(),"ProductValidator");
//return $product;
})->getResult();
return $resultInfo;
}

浙公网安备 33010602011771号