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

一:生成日志表实体

 

php bin/swoft entity:create --table=products_view --pool=db.pool --path=@app/Models

 二:模型(实体)保存的三种姿势

 public function prod_detail(int $id)
{
//为了获取请求参数和响应数据的方便,我们做了RequestResponse公共函数的封装;
//$p=NewProduct($id,"测试商品-链式调用");
//为了代码的简洁,封装了isGetisPost全局函数;
$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;


}
posted @ 2019-11-19 16:40  痞子胥  阅读(182)  评论(0)    收藏  举报