gpt4 book ai didi

php - Yii的Ar模型中Mysql "on Duplicate Key Update"的等效方法是什么

转载 作者:行者123 更新时间:2023-11-29 13:32:56 29 4
gpt4 key购买 nike

我正在尝试使用 Yii 的 AR 模型在表中插入数据。我想知道 Yii AR 中 MySQL 的 ON DUPLICATE KEY UPDATE 命令的等效方法是什么。下面是从巨大的 xml feed 中插入数据的方法示例。

public function insertData($name, $category, $brand, $price_unit, $weight_unit, $providers, $review_text, $flavor, $imageurl) {

$this->productModel = new Products;
$this->brandModel = new Brand;

$this->brandModel->name = $brand;


$this->brandModel->save();

$this->productModel->name = $name;
$this->productModel->category = $category;
$this->productModel->brand = $brand;
$this->productModel->weight_unit = $weight_unit;
$this->productModel->price_unit = $price_unit;
$this->productModel->flavors = $flavor;
$this->productModel->providers = $providers;
$this->productModel->review_text = $review_text;
$this->productModel->image_path = $imageurl;


$this->productModel->save();

}

如您所见,我正在使用 save() 进行简单的插入。但我想实现mysql的ON DUPLICATE KEY命令。

这是有问题的表格:

+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | MUL | NULL | |
| category | varchar(50) | YES | MUL | NULL | |
| brand | varchar(50) | NO | MUL | NULL | |
| weight | decimal(10,2) | YES | | NULL | |
| weight_unit | varchar(30) | YES | | NULL | |
| price | decimal(15,2) | YES | | NULL | |
| price_unit | varchar(30) | YES | | NULL | |
| flavors | varchar(45) | YES | | NULL | |
| providers | varchar(45) | YES | MUL | NULL | |
| review_text | text | YES | | NULL | |
| image_path | varchar(100) | YES | | NULL | |
+-------------+---------------+------+-----+---------+----------------+

因此,id 是这里的主键,name 上设置了索引以加快查找速度。类别和品牌是外键。

我想使用 Yii 的 ar 复制的查询将是这样的::

INSERT INTO tbl_products (name, category, brand, weight_unit, price_unit, flavors, providers, review_text, image_path) values ('.$this->parseXML[0] .', '. 
$this->parseXML[1] .','
.$this->parseXML[2] .','
. $this->parseXML[3] .','
. $this->parseXML[4] .','
. $this->parseXML[5] .','
.$this->parseXML[6] .','
.$this->parseXML[7] .','
.$this->parseXML[8].')
ON DUPLICATE KEY UPDATE
name = '.$this->parseXML[1].',
category = '.$this->parseXML[2].',
brand = '.$this->parseXML[3].'

那么,使用 Yii 的 AR 来实现这一点的有效方法是什么。我正在尽力避免使用暴力方法。

提前谢谢。我非常感谢我能得到的任何帮助。

谢谢,麦克斯

最佳答案

您可以在模型中定义唯一的验证规则。然后捕获违反此规则的情况,并使用条件 block 来处理数据,以防遇到重复值...

在模型规则中

array('id', 'unique','message'=>'duplicate value entered'),

在 Controller 中:

$this->brandModel->validate(); 
.......
.......

if ($this->brandModel->getError('id')==='duplicate value entered')
{
....
....
}

关于php - Yii的Ar模型中Mysql "on Duplicate Key Update"的等效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157674/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com