gpt4 book ai didi

php - Laravel 6.x - 'create()' 使用数据库默认值记录

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

我有一个简单的 MySQL 数据库表,如下所示:

mysql> show create table provenance;
| provenance | CREATE TABLE `provenance` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Unique incremental id',
`name` char(255) NOT NULL DEFAULT 'AUTO-ADDED',
`instance` char(255) NOT NULL,
`username` char(255) DEFAULT NULL COMMENT 'User name',
`priority` int(11) NOT NULL DEFAULT '0' COMMENT 'Provenance priority',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`inserted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=2869 DEFAULT CHARSET=latin1 COMMENT='Provenance' |
mysql>

如您所见,有些字段具有DEFAULT值:namepriority

Laravel 模型类似于:

class ProvenanceModel extends Model
{
protected $table = 'provenance';
protected $fillable = [
'name',
'instance',
'username',
'priority'
];
}

Controller :

class ProvenanceController extends Controller
{
public function myStore($array)
{
return ProvenanceModel::firstOrCreate(
[
'name' => $array['name'],
'instance' => $array['instance'],
'username' => $array['username'],
'priority' => $array['priority'],
]
);
}
}

问题是输入$array[]不能包含namepriority(它们是通过从DataBase设置的默认)。

但是我如何更改代码以避免错误,例如,因为 $array['name'] 不存在?

一个想法可能是将 Controller 代码更改为:

class ProvenanceController extends Controller
{
public function myStore($array)
{
return ProvenanceModel::firstOrCreate(
[
'name' => $array['name'] ?? 'AUTO-ADDED',
'instance' => $array['instance'],
'username' => $array['username'],
'priority' => $array['priority'] ?? 0,
]
);
}
}

但是如果我更改数据库上的DEFAULT,我需要更改 PHP 代码,但我不喜欢这样。

如果未传递字段,是否可以使用DEFAULT数据库值?

谢谢。

最佳答案

Laravel 在构造查询时无法知道数据库默认值是什么。

最好的选择是将 firstOrCreate 分成 2 个调用:

$model = ProvenanceModel::where($attributes)->first();

if (is_null($model)) {
$model = ProvenanceModel::create([
...
// non-default attributes
...
]);
}

return $model;

关于php - Laravel 6.x - 'create()' 使用数据库默认值记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854658/

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