请考虑下表:
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| vendor_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| vendor_name | varchar(100) | NO | UNI | NULL | |
| count | int(10) unsigned | NO | | 1 | |
+-------------+------------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
我有以下MySQL查询:
INSERT INTO `table`
(`vendor_name`)
VALUES
('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1
Run Code Online (Sandbox Code Playgroud)
此查询的目的是向表中插入新的供应商名称,如果供应商名称已存在,则列计数应增加1.但是当前列的主键也将自动递增.在这些情况下,如何防止MySQL自动递增主键?有没有办法用一个查询来做到这一点?
谢谢.
所以在 Laravel 5.1 中,我有两个 Eloquent 模型:
\App\Model\Product
\App\Model\Brand
Run Code Online (Sandbox Code Playgroud)
品牌和产品之间存在一对多的关系(即一个品牌可能有多个产品)。在我们的系统中,每次我们想要检索产品的雄辩模型时,我们都急切地加载品牌,如下所示:
$product = \App\Model\Product::whereId({integer})->with('brand')->first();
Run Code Online (Sandbox Code Playgroud)
我们不希望产品经常变化,所以为了减少数据库查询,提高性能,我们想用Redis缓存这些Product模型,以便在执行数据库查询之前,我们会检查Product实例是否已经存储在缓存中。所以我的问题是,能够从 Redis 存储和检索这些产品实例的最佳方法是什么?
我知道我们可以通过执行以下操作将 eloquent 模型转换为 JSON:
$json = $product->toJson();
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这将允许我将“字符串化”模型存储在 Redis 中。但是,我将如何进行相反的操作 - 将存储的 JSON 转换回 Product 实例(同时具有预先加载的 Brand 关系),我可以在代码中将其用作普通模型实例?
此外,为了减少 Redis 操作,这必须与 MGET 一起使用,允许我一次检索多个实例。流水线获取操作也是可以接受的。
这是可行的,还是有更好的方法来实现这一目标?
先感谢您。