gpt4 book ai didi

php - 扩展 Laravel 4 连接类?

转载 作者:行者123 更新时间:2023-11-30 00:04:16 25 4
gpt4 key购买 nike

有什么方法可以扩展 Laravel 连接类吗?

基本上,我需要 insert() 命令的强大功能,但我需要在查询中添加更多单词。 Laravel 没有 ON DUPLICATE KEY 功能。因此,我需要能够将数据数组传递到函数中,并让它处理其余的事情。

我尝试了原始查询,但我真的不知道该怎么做才能使我的多维数据数组与 SQL 配合使用,Laravel 似乎就像魔术一样。

我想要这样的东西:

DB::table('table')->insert($data);

在 Laravel 插入函数中,是这样的:

public function insert($tableName, array $data, array $types = array())
{
$this->connect();

if (empty($data)) {
return $this->executeUpdate('INSERT INTO ' . $tableName . ' ()' . ' VALUES ()');
}

return $this->executeUpdate(
'INSERT INTO ' . $tableName . ' (' . implode(', ', array_keys($data)) . ')' .
' VALUES (' . implode(', ', array_fill(0, count($data), '?')) . ')',
array_values($data),
is_int(key($types)) ? $types : $this->extractTypeValues($data, $types)
);
}

用这个代替:

public function insertIgnoreDuplicates($tableName, array $data, array $types = array(), $col)
{
$this->connect();

if (empty($data)) {
return $this->executeUpdate('INSERT INTO ' . $tableName . ' ()' . ' VALUES ()');
}

return $this->executeUpdate(
'INSERT INTO ' . $tableName . ' (' . implode(', ', array_keys($data)) . ')' .
' VALUES (' . implode(', ', array_fill(0, count($data), '?')) . ') ON DUPLICATE KEY SET $col=$col',
array_values($data),
is_int(key($types)) ? $types : $this->extractTypeValues($data, $types)
);
}

我看到了一些关于扩展类的博客,但他们说这样做的唯一方法是重新实现每个功能,这对于 Laravel 升级来说是很糟糕的。

除非有人有不同的选择:

DB::table('table')->insert($data);

并添加重复键约束,我很想听听。

我已经尝试过这个:

$columns = implode(", ", array_keys($data));
$escaped_values = array_map('mysql_real_escape_string', array_values($data));
$values = implode("', '", $escaped_values);
if (DB::statement("INSERT INTO `my_table` ($columns) VALUES ($values) ON DUPLICATE KEY UPDATE col_a = col_a")) {
return true;
} else {
return false;
}

我在另一篇 SO 帖子中找到了这一点,但我不断收到“mysql_real_escape_string() 期望参数 1 为字符串,给定数组”

因此,我们非常感谢任何帮助。我真的希望 Laravel 具有此默认功能,因为所有幕后工作确实使事情更容易完成。

感谢您的帮助。

最佳答案

该错误是由 $data 数组的某些成员引起的; mysql_real_escape_string 需要一个字符串,并且 array_map$data 的每个成员提供给它,无论类型如何。

在将值传递给 DB::statement 之前,无需手动转义值。 Eloquent 在幕后使用 PDO,这将转义绑定(bind)参数。尝试类似 DB::statement('INSERT INTOmy_table(?, ?) VALUES (?, ?) ON DUPLICATE KEY UPDATE col_a = col_a', array('col_a', 'col_b ', $data[0], $data[1])

关于php - 扩展 Laravel 4 连接类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729149/

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