gpt4 book ai didi

php - 将动态对象属性名称插入数据库

转载 作者:行者123 更新时间:2023-11-29 04:35:20 25 4
gpt4 key购买 nike

好吧,我有一个我想运行的插入查询,但我遇到的问题是获取我需要插入的对象属性/值。假设我有一个如下所示的查询。

$this->db->insert('tblitems_in', array(
'platform' => $item['Platform'],
'ram' => $item['RAM'],
'qty' => $item['qty'],
'rate' => number_format($item['rate'], 2, '.', ''),
'rel_id' => $insert_id,
'rel_type' => 'estimate',
'item_order' => $item['order'],
'unit' => $item['unit']
));

当用户在网页上选择 RAM 将 $item Objects 属性“RAM”设置为所选值时,这会正常工作。现在,如果他们选择 HardDrive,该属性名称现在将作为“HardDrive”发送,并带有他们选择的值。有没有一种方法可以用变量替换下面示例中的“ram”和“RAM”,这样我就可以更改我想要插入的属性名称并将其插入到相应的数据库列中?

编辑:

我应该补充一点,网页上的选项也是从数据库动态创建的,所以我在编码时不知道属性名称是什么。它们可能是 RAM、硬盘驱动器、处理器,甚至可能是 Elephant。我希望我可以使用变量,以便我可以查看用于创建网页的数据库,以便我知道属性名称,然后将这些名称动态添加到查询中。

编辑:

现在我正在使用以下代码,以便从网页用于创建自身的数据库中获取可以从网页接收的所有可能选项。

$plat_options = $this->db->get('tblplatform_options')->row()->name;

目前在数据库中,它只填充了名称 RAM 和 HardDrive,以便为测试目的提供已知信息。所以这会返回 $plat_options = {RAM, HardDrive}。我现在必须弄清楚如何测试 $item 是否具有这些(RAM 和 HardDrive)作为属性,如果 $item 确实具有它们,则将它们添加到之前显示的查询中。

最佳答案

您可以设置一个 key => 变量名数组,然后遍历这些值以查看它们是否存在于 $item 变量中,如果存在,则将该值添加到要获取的数据中插入数据库:

//default array of data to insert
$data = [
'platform' => $item['Platform'],
'qty' => $item['qty'],
'rate' => number_format($item['rate'], 2, '.', ''),
'rel_id' => $insert_id,
'rel_type' => 'estimate',
'item_order' => $item['order'],
'unit' => $item['unit']
];

//Get column names from db
$plat_options = $this->db->get('tblplatform_options')->row()->name;
// $plat_options = [RAM, HardDrive]

//Check if $item[$name] exists. If it does, add that to the
// array of data to be inserted
foreach($plat_options as $key) {
if(array_key_exists($key, $item)) {
$data[$key] = $item[$key];
}
}

$this->db->insert('tblitems_in', $data);

编辑

我不确定这是否可行(我不了解用例)。

可以使用 array_diff_key 获取存在于 $item 但不存在于 $data 中的数组键列表。使用此键数组,您可以添加缺少的键。

我修改了我以前的代码来证明这一点。

关于php - 将动态对象属性名称插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44002585/

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