Yii2 将部分数据插入 table
Yii2 insert partial data into table
我正在插入来自另一个 table 的 table 数据,它基本上是第一个 table.
的子集
$partialProduct = partialProducts::find()
->where(['company_id' => $company_id])
->andWhere(['productName' => $productName])->one();
$partialProductData = ($partialProductData['attributes']);
$product = Yii::$app->db->createCommand()
->insert('products', [
'field1' => $field1value,
...
...
'fieldN' => $fieldN,
])->execute();
类似的方法可行,但考虑到 partialProductData 有很多字段,我正在寻找一种更简洁的方法。
我尝试过 foreach(partialProductData as $key => $value)
方法,考虑到键被命名为产品 table 列名称,但我很难获得可行的东西。
如建议的那样,如果键与两个模型中的 table 字段匹配,则创建一个 key/values 对数组应该可行。类似于:
$data = [];
foreach($partialProduct->attributes as $key => $value):
$data[$key] = $value;
endforeach;
$product = Yii::$app->db->createCommand()
->insert('products', $data)
->execute();
或者,您可以使用大量赋值。同样,要使其正常工作,两个模型上的字段需要匹配:
$product = new Product;
$product->attributes = $partialProduct->attributes;
$product->save();
如果您只想将部分产品中的某些字段保存到您的产品中,您可以使用 scenarios to select the specific fields you want to be to set with massive assignment:
在Product.php
const SCENARIO_TEST = 'test';
...
public function scenarios()
{
return [
self::SCENARIO_TEST => ['field_1', 'field_2'], // Any field not listed here will not be set
];
}
无论你在哪里进行保存:
$product = new Product;
$product->scenario = Product::SCENARIO_TEST;
$product->attributes = $partialProduct->attributes;
$product->save();
我正在插入来自另一个 table 的 table 数据,它基本上是第一个 table.
的子集 $partialProduct = partialProducts::find()
->where(['company_id' => $company_id])
->andWhere(['productName' => $productName])->one();
$partialProductData = ($partialProductData['attributes']);
$product = Yii::$app->db->createCommand()
->insert('products', [
'field1' => $field1value,
...
...
'fieldN' => $fieldN,
])->execute();
类似的方法可行,但考虑到 partialProductData 有很多字段,我正在寻找一种更简洁的方法。
我尝试过 foreach(partialProductData as $key => $value)
方法,考虑到键被命名为产品 table 列名称,但我很难获得可行的东西。
如建议的那样,如果键与两个模型中的 table 字段匹配,则创建一个 key/values 对数组应该可行。类似于:
$data = [];
foreach($partialProduct->attributes as $key => $value):
$data[$key] = $value;
endforeach;
$product = Yii::$app->db->createCommand()
->insert('products', $data)
->execute();
或者,您可以使用大量赋值。同样,要使其正常工作,两个模型上的字段需要匹配:
$product = new Product;
$product->attributes = $partialProduct->attributes;
$product->save();
如果您只想将部分产品中的某些字段保存到您的产品中,您可以使用 scenarios to select the specific fields you want to be to set with massive assignment:
在Product.php
const SCENARIO_TEST = 'test';
...
public function scenarios()
{
return [
self::SCENARIO_TEST => ['field_1', 'field_2'], // Any field not listed here will not be set
];
}
无论你在哪里进行保存:
$product = new Product;
$product->scenario = Product::SCENARIO_TEST;
$product->attributes = $partialProduct->attributes;
$product->save();