Идентификатор базы данных отличается от API Laravel - PullRequest
0 голосов
/ 23 января 2019

Записи в базе данных отличаются от тех, что я получаю с помощью API Laravel.

Я хочу получить элементы с уникальным идентификатором строки. Но у меня проблема. Мне удалось записать элементы, но когда я их получаю, я получаю другое значение идентификатора.

Например, для продукта с идентификатором "5c47b3c858e2a" я получаю идентификатор со значением 5. Я попытался запросить значение напрямую, также используя eloquent. И тот же результат.

Миграции

public function up()
{
    Schema::create('warehouses', function (Blueprint $table) {
        $table->string('id')->unique();
        $table->string('name');
        $table->integer('branch_id');
        $table->timestamps();
    });
}

public function getWarehousesOfBranch(Branch $branch) {
    return $branch->warehouses;
}

public function warehouses()
{
    return $this->hasMany('App\Warehouse');
}

public function up()
{
    Schema::create('branches', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->timestamps();
    });
}

getWarehousesOfBranch - это метод API, простой GET.

Я ожидаю получить такое же записанное значение из базы данных.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

По умолчанию Laravel предполагает, что ключи являются автоматически увеличивающимися целыми числами. Из-за этого он автоматически преобразует ключ в целое число при попытке доступа к нему.

Для решения этой проблемы необходимо обновить поля $incrementing и $keyType в вашей модели:

protected $keyType = 'string';

public $incrementing = false;

В большинстве случаев эти два значения используются вместе друг с другом, но есть места, где они используются независимо, поэтому было бы лучше установить оба значения соответствующим образом.

0 голосов
/ 23 января 2019

Установка приращения $ в false на модели хранилища решила проблему.

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