gpt4 book ai didi

php - Laravel (v5.2.45) 播种器和双引号

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

我正在尝试使用 Laravel (v5.2.45) DB Seeder 在 Postgres 数据库中启动查找表。

当我运行它时,我得到了这个输出:

[Illuminate\Database\QueryException]
SQLSTATE[42703]: Undefined column: 7 ERROR: column "lkup_type" of relation "syslookups" does not exist
LINE 1: insert into "syslookups" ("lkup_type", "lkup_text") values (...
^ (SQL: insert into "syslookups" ("lkup_type", "lkup_text") values (0, Employee))

这是播种器代码:

<?php

use Illuminate\Database\Seeder;

class SyslookupsSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('syslookups')->delete();

DB::table('syslookups')->insert(
['lkup_type'=>0, 'lkup_text'=>"Employee"],
['lkup_type'=>0, 'lkup_text'=>"Member"],
['lkup_type'=>1, 'lkup_text'=>"Open"],
['lkup_type'=>1, 'lkup_text'=>"Closed"],
// .. many more here
['lkup_type'=>5, 'lkup_text'=>"Yes"],
['lkup_type'=>5, 'lkup_text'=>"No"],
['lkup_type'=>6, 'lkup_text'=>"Work Phone"],
['lkup_type'=>6, 'lkup_text'=>"Fax"],
['lkup_type'=>6, 'lkup_text'=>"Home Phone"],
['lkup_type'=>6, 'lkup_text'=>"Cell Phone"]
);
}
}

有什么办法可以让它不使用双引号吗?我尝试在表名和列名周围加上双引号,结果相同。该表有一个名为 lkup_id 的序列列和默认的 created_atupdated_at 列,我是否也需要为它们设置种子?

编辑

我找到了引起双引号的行。 PostgresGrammar.php, function wrapValue() 但当我更改此行时:

return '"'.str_replace('"', '""', $value).'"';

为此:

return str_replace('"', '""', $value);

我现在收到这个错误:

[Illuminate\Database\QueryException]
SQLSTATE[42703]: Undefined column: 7 ERROR: column "lkup_type" of relation "syslookups" does not exist
LINE 1: insert into syslookups (lkup_type, lkup_text) values ($1, $2...
^ (SQL: insert into syslookups (lkup_type, lkup_text) values (0, Employee))

在我看来,这似乎是适用于 Postgres 的正确 SQL...

最佳答案

对于 Postgres,Laravel 的查询构建器似乎总是将列名放在双引号内。我没有看到任何禁用此功能的选项,而且我不使用 postgres。

在查询构建器中解决这个问题的一种方法是将您的列名放在原始表达式中,但这不适用于您的插入语句,因为原始表达式对于数组来说是无效的键。

看来,如果你不想写自己的驱动程序或者修改 Laravel 的代码,你必须为此使用原始语句。

DB::insert('INSERT INTO syslookups (lkup_type, lkup_text) ...');

长话短说,Laravel 假设所有的列都应该被引用,这可能是不正确的,所以你可能想确保你的表定义符合这个约定。

关于php - Laravel (v5.2.45) 播种器和双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432069/

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