Подсветка \ База данных \ QueryException в Laravel 6.0, но не в 5.8 - PullRequest
0 голосов
/ 09 октября 2019

У меня проблема с Laravel 6.0. Тот же исходный код работает нормально с Laravel 5.8. Ошибка выглядит следующим образом:

Подсветка \ База данных \ QueryException SQLSTATE [22018]: [Microsoft] [Драйвер ODBC 13 для SQL Server] [SQL Server] Преобразование не удалось при преобразовании значения nvarchar 'XXXX' в тип данныхвнутр. (SQL: выберите * из [business_units] где [business_units]. [Code] в (0, 0, 0, 0))

Попытка создать проект laravel, используя 5.8 и 6.0, содержащие одинаковый исходный код, норезультат тот же, работает хорошо в 5,8, но не в 6,0. Возможно, что-то не так в Eloquent.

Вот миграция:

Schema::create('cost_centers', function (Blueprint $table) {
            $table->string('code', 6)->primary();
            $table->string('descr', 50);
            $table->string('business_unit_code', 6)->index();
            $table->foreign('business_unit_code')->references('code')->on('business_units');
            $table->timestamps();
        });

Сценарий моей модели:

class CostCenter extends Model
{
    protected $primaryKey = 'code';
    protected $fillable = ['code', 'descr', 'business_unit_code'];

    public $incrementing = false;

    public function businessUnit()
    {
        return $this->belongsTo(BusinessUnit::class);
    }
}

Это после открытия формы сстолбец в таблице, ссылающийся на другой столбец, где первичным ключом является строка. Кто-нибудь сталкивался с этой проблемой, каково ваше решение?

1 Ответ

0 голосов
/ 09 октября 2019

В табличной модели "business_units" я изменяю объявление с Это необходимо при использовании строки в качестве первичного ключа.

public $incrementing = false;

на

protected $keyType = 'string';

Это указывается вРуководство по обновлению Laravel, как указал мне Синнбек из Laracast, но почему-то пропустило его. https://laravel.com/docs/6.x/upgrade#eloquent-primary-key-type

...