我有两种模式:
包含ip
,port
,players_online
,votes
列的模型服务器。
我的模型统计信息包含以下列:server_id
,online
,votes
。
在统计模型中,我有:
protected $fillable = ['server_id', 'votes', 'online'];
public function server() {
return $this->belongsTo('App\Models\Server');
}
我有代码:
$servers = Server::all();
foreach($servers as $server) {
$statss = getMcServer($server->ip, $server->port);
$server->players_online = $statss['online'] ? $statss['online'] : 0;
$stats = new Stats();
$stats->server()->associate($server);
$stats->save();
$server->save();
}
当我使用员工时,我收到错误:
SQLSTATE[HY000]: General error: 1364 Field 'online' doesn't have a default value (SQL: insert into `stats` (`server_id`, `updated_at`, `created_at`) values (24, 2018-05-15 12:12:21, 2018-05-15 12:12:21))
答案 0 :(得分:0)
通常这应该有效:
$servers = Server::all();
foreach($servers as $server) {
$statss = getMcServer($server->ip, $server->port);
$server->players_online = $statss['online'] ? $statss['online'] : 0;
$stats = new Stats();
$stats->online = $server->players_online;
$stats->votes = $server->votes;
$stats->server()->associate($server);
$stats->save();
$server->save();
}
查看您的错误,看起来统计模型中的字段online
设置为guarded
或未设置为fillable
,您应将其添加到fillable
数组中模型,因此您可以设置数据,然后将其保存到数据库:
protected $fillable = ['votes','online'];
您可以在Laravel官方文档的Eloquent -> Inserting & Updating Models中详细了解fillable
和guarded
。
如果您的fillable
数组正常,可能数据库中的列不可为空或者没有默认值,如果此数据不是必需的或是可选的,请将它们更改为nullabe或添加默认值,问题就会解决。