Как объявлять такой string как первичный ключ в migration laravel 5.2 и потом называть ее как чужеземный ключ?

Попробуйте занимать следующий код:

public function up()
    {
        Schema::create('microbuses', function (Blueprint $table) {
            $table->string('patente');
            $table->string('marca');
            $table->string('modelo');
            $table->integer('agno');
            $table->integer('linea_id')->unsigned();

            $table->foreign('linea_id')
                ->references('id')->on('lineas');

            $table->timestamps();
        });

    }

Потом попробовав называть 'run' как чужеземный ключ он дает мне ошибку:

public function up()
    {
        Schema::create('microbus_paradero', function (Blueprint $table) {
            $table->increments('id');
            $table->string('microbus_patente')->unsigned();
            $table->integer('paradero_id')->unsigned();

            $table->foreign('microbus_patente')
                ->references('id')->on('microbuses');
            $table->foreign('paradero_id')
                ->references('id')->on('paraderos');

            $table->timestamps();
        });
    }

Как кажется, метод "unsigned" только функционирует с переменными типа integer, и как моя переменная - string, возможно, что ошибка коренится там. Но это единственная форма, которую я знаю, и nose, как объявлять чужеземный ключ, который ссылался бы на поле string.

2
задан 28.04.2017, 18:41
3 ответа

В таблице microbuses ты можешь определять первичный ключ следующего способа, в линии, в методе up():

$table->primary('patente'); // o el campo que desees

Действительно метод unsigned только для целых чисел. Больше информации (для MySQL): http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

Заявление чужеземного ключа, который ты делаешь, - правильно, всякий раз когда поле существовало в другой таблице:

$table->foreign('microbus_patente')->references('patente')->on('microbuses');
3
ответ дан 24.11.2019, 14:41

Привет, что такая ошибка, которую я вижу, состоит в том, что таблица микроавтобусы нет поля, пойдите и в этой части ты ссылаешься на

$table->foreign('microbus_patente')
            ->references('id')->on('microbuses');

с другой стороны, если то, что ты желаешь, он состоит в том, чтобы помещать, как primarykey string ты можешь interntar с этим, помни, что индексы должны быть уникумами, чтобы предотвращать проблемы

 $table->string('patente')->unique();
 $table->foreign('microbus_patente')
                ->references('patente')->on('microbuses');

типов Привета.

0
ответ дан 24.11.2019, 14:41

unsigned значь "Без знака" только функционируй для целых чисел.

Вопрос... Почему такой string как первичный ключ?

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

Лучше оставлять типичное целое число как первичный ключ, чтобы уважать autoincrement, unsigned и иметь больше возможности во время делания связей.

Также ты можешь создавать hashid через Ларавэль Асидс, что то, что он делает, он состоит в том, чтобы кодировать безопасным способом твоими IDs, чтобы не выставлять их.

0
ответ дан 24.11.2019, 14:41