【发布时间】:2019-11-14 10:32:54
【问题描述】:
我有一个简单的 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 值的字段:name 和 priority。
Laravel 模型类似于:
class ProvenanceModel extends Model
{
protected $table = 'provenance';
protected $fillable = [
'name',
'instance',
'username',
'priority'
];
}
和控制器:
class ProvenanceController extends Controller
{
public function myStore($array)
{
return ProvenanceModel::firstOrCreate(
[
'name' => $array['name'],
'instance' => $array['instance'],
'username' => $array['username'],
'priority' => $array['priority'],
]
);
}
}
问题是输入$array[] 不能包含name 或priority(它们是从数据库中用DEFAULT 设置的)。
但是我如何更改我的代码以避免错误,例如,$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,
]
);
}
}
但如果我更改 DB 上的 DEFAULT,我需要更改 PHP 代码,但我不喜欢这样。
如果字段未通过,有没有办法使用DEFAULT数据库值?
谢谢。
【问题讨论】:
-
如果您没有在名称或优先级中插入任何内容,很确定它已经自动完成
标签: php mysql laravel eloquent laravel-6