Как связать модель сервера со статистикой в ​​Laravel - PullRequest
0 голосов
/ 15 мая 2018

У меня есть две модели:

Модель сервера с колонками 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();
    }

Когда я использую Associate, я получаю сообщение об ошибке:

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 голосов
/ 15 мая 2018

Обычно это должно работать:

$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'];

Подробнее о fillable и guarded можно прочитать в Eloquent-> Вставка и обновление моделей из официальных документов Laravel.

Если с вашим массивом fillable все в порядке, возможно, столбцы вашей базы данных не обнуляются или не имеют значения по умолчанию, если этоданные не являются обязательными или необязательными, измените их на nullabe или добавьте значение по умолчанию, и проблема будет решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...