如何将模型服务器与Laravel中的统计信息关联起来

时间:2018-05-15 08:35:43

标签: php laravel

我有两种模式:

包含ipportplayers_onlinevotes列的模型服务器。
我的模型统计信息包含以下列:server_idonlinevotes

在统计模型中,我有:

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))

1 个答案:

答案 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中详细了解fillableguarded

如果您的fillable数组正常,可能数据库中的列不可为空或者没有默认值,如果此数据不是必需的或是可选的,请将它们更改为nullabe或添加默认值,问题就会解决。