2020-10-12 11:34:44
围观(6938)
最近两天把之前写的“遛遛狗” WWW.LL9.TOP 修复了一些 BUG(关于这个的文章:使用PHP Laravel 框架开发淘客站点)
另外发现用户访问就直接实时请求阿里妈妈联盟的接口不太好,一来是数据难控制,有时候接口返回的数据某个参数是空的,二来是香港服务器访问阿里接口有点慢,所以改成定时请求接口将数据存起来,现在目前是使用 MySQL 进行存储,后面有时间再改成 MongoDb.
因为是使用 Laravel 框架开发的,所以直接使用了 insert 批量插入数据到数据库,如这样:
foreach($接口返回的数据 as $data) { $lst_save[] = [ 'product_item_id' => $row_product['item_id'], 'url' => $row_product['coupon_share_url'], 'price' => $row_product['zk_final_price'], 'coupon_price' => $row_product['coupon_amount'], 'use_coupon_price' => $row_product['zk_final_price'] - $row_product['coupon_amount'], 'shop_title' => $row_product['shop_title'], 'pict_url' => $row_product['pict_url'], 'title' => $row_product['title'], 'item_description' => $row_product['item_description'], 'volume' => $row_product['volume'], ]; } $model_product = new Product(); $model_product->insert($lst_save);
然后运行了一天发现太多重复的数据了。果断给 product_item_id 字段加上了唯一索引。
总所周知加了唯一索引可以使用 ignore 或 Replace 在插入数据的时候跳过重复数据,例如这样:
INSERT IGNORE INTO `products` (`product_item_id`, `url`) VALUES ('1111', 'url'); REPLACE INTO `products`(`product_item_id`, ...) VALUES (...);
就开始了查阅文档 / 使用搜索引擎 查找 Laravel 是否有类似的方法执行这样的 SQL, 如果没有的话可能就只能拼接 SQL了。
最后在官方文档找到了一个这样的方法 insertOrIgnore 官方示例:
DB::table('users')->insertOrIgnore([ ['id' => 1, 'email' => 'taylor@example.com'], ['id' => 2, 'email' => 'dayle@example.com'], ]);
文档地址:https://laravel.com/docs/8.x/queries#inserts
注:该方法只有 Laravel 5.8 及以上版本才有。
最后将 insert 方法改成 insertOrIgnore 就行了:
foreach($接口返回的数据 as $data) { $lst_save[] = [ 'product_item_id' => $row_product['item_id'], 'url' => $row_product['coupon_share_url'], 'price' => $row_product['zk_final_price'], 'coupon_price' => $row_product['coupon_amount'], 'use_coupon_price' => $row_product['zk_final_price'] - $row_product['coupon_amount'], 'shop_title' => $row_product['shop_title'], 'pict_url' => $row_product['pict_url'], 'title' => $row_product['title'], 'item_description' => $row_product['item_description'], 'volume' => $row_product['volume'], ]; } $model_product = new Product(); $model_product->insertOrIgnore($lst_save);
本文地址 : bubaijun.com/page.php?id=211
版权声明 : 未经允许禁止转载!
上一篇文章: MySQL主从复制与读写分离
下一篇文章: Centos编译安装Redis