php - Laravel Migration create foreign key using foreignIdFor with specific data type?
one text
So I've been trying to write a migration that creates a data table question_display_formats
using tiny increments as you see below.
And then, adding new Foreign Key column to existing questions
table, trying to use the foreignIdFor
method as a shortcut that'd look nice
public function up()
{
Schema::create('question_display_formats', function (Blueprint $table) {
$table->tinyIncrements('id');
$table->string('format');
});
Schema::table('questions', function (Blueprint $table) {
$table->foreignIdFor(QuestionDisplayFormat::class)
->nullable(true)
->after('question_type_id')
->constrained();
});
}
Turns out, this errors out with
General error: 1215 Cannot add foreign key constraint
Which turns out because the foreignIdFor users a different data type (confirmed by manually matching them and running the erroring out SQL alter table
statement).
I googled, read and tried to adjust by doing:
$table->mediumIncrements('question_display_format_id');
before the foreignIdFor
line, which leads to error
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'question_display_format_id' (SQL: alter table
questions
addquestion_display_format_id
mediumint un signed not null auto_increment primary key, addquestion_display_format_id
bigint unsigned null afterquestion_type_id
)
Is there a way to use foreignIdFor
with the matching column size? or am I supposed to fall back on the classic way of first creating the column explicitly, then doing like $table->foreign('question_display_format_id')->references('id')->on('question_display_formats');
which I don't like because its very verbose and doesn't look good?
On the other hand, this is a one time used script.. lol would've been faster to just do it the old way! but I am curious to see how to do it right :)
Source