یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دورهها
استفاده از تخفیفهاسلام به همگی دوستان عزیز
بنده می خوام که با استفاده از کد زیر در مایگرشن یه جدول برای مقالات سایتم درستم کنم.
public function up()
{
Schema::create('articles',
function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->string('slug');
$table->string('tags');
$table->text('description');
$table->text('body');
$table->text('images');
$table->integer('viewCount');
$table->integer('commentCount');
$table->timestamps();
});
}
ولی وقتی دستور php artisan migrate
رو وارد می کنم پیغام زیر رو بر می گردونه.
SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`articles` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `articles` add constraint `articles_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)
at C:\Users\Ali\Desktop\laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php:669
665| // If an exception occurs when attempting to run a query, we'll format the error
666| // message to include the bindings with SQL, which will make this exception a
667| // lot more helpful to the developer instead of just the database's errors.
668| catch (Exception $e) {
> 669| throw new QueryException(
670| $query, $this->prepareBindings($bindings), $e
671| );
672| }
673|
1 C:\Users\Ali\Desktop\laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php:463
PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`articles` (errno: 150 "Foreign key constraint is incorrectly formed")")
2 C:\Users\Ali\Desktop\laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php:463
PDOStatement::execute()
ممنون می شم که راهنماییم کنید.
@ali.bayat
@hesammousavi
دوستان اشکال رو پیدا کردم.
توی لاراول ورژن 7 وقتی از کد زیر استفاده می کنید دیگه لازم نیست از قبل یه فیلد integer به اسم user_id بسازید بلکه هم کار ساختن فیلد رو انجام میده و هم میاد ارتباط بین جداول رو ایجاد می کنه.
$table->foreignId('user_id')->references('id')->on('users')->onDelete('cascade');
با سلام . میشه کد مایگریشن جدول یوزرتون رو هم بذاررین ؟ شاید نوع فیلد id در جدول users چیزی غیر از integer هست . مثلا اگر فیلد id در جدولی bigInt هست باید فیلد کلید خارجی هم از نوع bigInt باشه . البته هنوز ساختار لاراول 7 رو نگاه نکردم ممکنه مایگریشن تغییر کرده باشه اما از زمانی که لاراول در ورژن 6 تایپ دیفالت id رو به binInt تغییر داد این مشکل زیاد پیش اومد برای خودم .
سلام دوست عزیز
این هم کد مایگریشن جدول کاربران
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('level','6')->default('user');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
این کد رو
$table->integer('user_id')->unsigned();
با کد زیر عوض کنید
$table->bigInteger('user_id')->unsigned();
دوستان اشکال رو پیدا کردم.
توی لاراول ورژن 7 وقتی از کد زیر استفاده می کنید دیگه لازم نیست از قبل یه فیلد integer به اسم user_id بسازید بلکه هم کار ساختن فیلد رو انجام میده و هم میاد ارتباط بین جداول رو ایجاد می کنه.
$table->foreignId('user_id')->references('id')->on('users')->onDelete('cascade');
@Ali.Abbasi1381 ممنون بخاطر به اشتراک گذاری . جالب بود اصلا دقت نکردم به اینکه foreingId هست . ظاهرا تازه اضافه شده به لاراول .
@Ali.Abbasi1381
ممنون. چند ساعتی درگیر این مشکل بودم تا راه حل شما رو خوندم و مشکلم برطرف شد.
یک دنیا ممنون از به اشتراک گذاری راه حلتون
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟