Я использую запрос REST POST для создания новой строки в моем db, но это сохраняет значения null, а не значения, которые я отправил. Поэтому я попытался отправить запрос PUT для изменения существующих данных, но он не изменил строку (например, когда я использую GET). На самом деле, запрос GET работает нормально
CountryController.php:
<?php namespace app\controllers; use yii\rest\ActiveController; class CountryController extends ActiveController { public $modelClass = 'app\models\Country'; }
Модель Country.php:
Я попытался сделать это с помощью другой таблицы без установки primaryKey здесь, но получил тот же результат.
<?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { public static function primaryKey() { return ['code']; } }
Вот мой стол:
mysql> describe country; +------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+-------+ | code | char(2) | NO | PRI | NULL | | | name | char(52) | NO | | NULL | | | population | int(11) | NO | | 0 | | +------------+----------+------+-----+---------+-------+ mysql> select * from country; +------+----------------+------------+ | code | name | population | +------+----------------+------------+ | AU | Australia | 18886000 | | BR | Brazil | 170115000 | | CA | Canada | 1147000 | | CN | China | 1277558000 | | DE | Germany | 82164700 | | FR | France | 59225700 | | GB | United Kingdom | 59623400 | | IN | India | 1013662000 | | RU | Russia | 146934000 | | US | United States | 278357000 | +------+----------------+------------+
Попробуйте данные POST:
И получите результат:
mysql> select * from country; +------+----------------+------------+ | code | name | population | +------+----------------+------------+ | | | 0 | | AU | Australia | 18886000 | | BR | Brazil | 170115000 | | CA | Canada | 1147000 | | CN | China | 1277558000 | | DE | Germany | 82164700 | | FR | France | 59225700 | | GB | United Kingdom | 59623400 | | IN | India | 1013662000 | | RU | Russia | 146934000 | | US | United States | 278357000 | +------+----------------+------------+
Также я попытался распечатать запрос с использованием print_r / die и получил очевидный правильный результат /vendor/yiisoft/yii2/rest/CreateAction.php
public function run() { if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id); } /* @var $model \yii\db\ActiveRecord */ $model = new $this->modelClass([ 'scenario' => $this->scenario, ]); $model->load(Yii::$app->getRequest()->getBodyParams(), ''); if ($model->save(false)) { // PRINT THE REQUEST DATA print_r(Yii::$app->getRequest()->getBodyParams()); die(); $response = Yii::$app->getResponse(); $response->setStatusCode(201); $id = implode(',', array_values($model->getPrimaryKey(true))); $response->getHeaders()->set('Location', Url::toRoute([$this->viewAction, 'id' => $id], true)); } elseif (!$model->hasErrors()) { throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); } return $model; }
Предварительный ответ:
Но эти данные не сохранялись в базе данных правильно, как я описал выше