جستجو در بخش : سوال جواب منابع اسلامی لغت نامه ها قوانین و مصوبات نقل قل ها
×

فرم ورود

ورود با گوگل ورود با گوگل ورود با تلگرام ورود با تلگرام
رمز عبور را فراموش کرده ام عضو نیستم، می خواهم عضو شوم
×

×

آدرس بخش انتخاب شده


جهت کپی کردن میتوانید از دکمه های Ctrl + C استفاده کنید
رویداد ها - امتیازات
در حال بارگذاری
×

رویداد ها - امتیازات

برای بررسی عملکرد فعالیت و امتیازات خود باید در وب سایت وارد باشید. در صورت عضویت از بخش بالای صفحه وارد شوید، در غیر این صورت از دکمه پایین، مستقیم به صفحه ثبت نام وارد شوید.

×
×
×

دلیل درخواست بستن پست

کلیه پست هایی که جنبه تبلیغاتی داشته، محتوای اسپم و بی مفهوم در این دسته قرار میگیرند. همچنین پست هایی که به منظور گرفتن بک لینک درج می شوند شامل این مورد هستند.
حاوی مفاهیم غیر اخلاقی، سیاسی و یا توهین آمیز. کلیه پست هایی که از نظر محتوایی نیاز به بررسی و یا حذف شدن دارند در این دسته قرار می گیرند.
محتوایی با عدم جزئیات کافی و مورد نیاز. کلیه پست هایی که منظور نویسنده به وضوح مشخص نیست و نیازمند توضیحات و جزئیات بیشتر می باشند در این دسته قرار می گیرند.
محتوایی بی ربط با موضوعیت سرفصل کلی. کلیه پست هایی که از منظر مفهوم و مضمون ارتباطی با عنوان اصلی سوال ندارند در این دسته قرار می گیرند.
محتوایی دلخواه و بر پایه سلیقه. کلیه پست هایی که یک پاسخ مشخص ندارند و متوانند چندین پاسخ متفاوت و صحیح داشته باشند که کاملا مبتنی بر نظر شخصی افراد هستند در این دسته قرار می گیرند.
محتوایی در حوزه خیلی وسیع. کلیه پست هایی که از نظر محتوایی در یک حوزه ی وسیعی قرار دارند و مشخصا به یک موضوع خاصی اشاره ندارند که پاسخدهی به آن ها مستلزم تشریح مفاهیمی کلی می باشند در این دسته قرار می گیرند.
قبلا در لام تا کام مطرح شده. پست هایی که دقیقا با همین محتوا و مضمون قبلا در وب سایت لام تا کام درج شده اند، با ذکر آدرس منبع تکراری با پست حال حاضر شامل این دسته هستند. تکراری است با:
به سایر دلایل، نیازمند به بررسی توسط مدیر. به هر دلیل غیری که پست را نیازمند بررسی توسط مدیر کرده، با ذکر دلیل، در این دسته قرار میگیرد.
ارسال رای بستن

خطای : Cannot add foreign key constraint in laravel


2
0
1479

سلام دوستان

یه پکیج درگاه پرداخت برای لاراول نصب کردم حالا میخوام یه تغیری توی مایگریشن اون پکیج ایجاد کنم اما زمان مایگریت این خطا داده میشه:

> Illuminate\Database\QueryException: > SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `gateway_transactions` add constraint `gateway_transactions_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete CASCADE)

مایگریشن پکیج

public function up()
    {
        Schema::create('gateway_transactions', function (Blueprint $table) {
            $table->engine = "innoDB";
            $table->unsignedBigInteger('id', true);
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE');
            $table->enum('provider', \Parsisolution\Gateway\GatewayManager::availableDrivers());
            $table->decimal('amount', 15, 2);
            $table->integer('order_id')->nullable();
            $table->string('currency', 3)->nullable();
            $table->string('ref_id', 100)->nullable();
            $table->string('tracking_code', 50)->nullable();
            $table->string('card_number', 50)->nullable();
            $table->enum('status', \Parsisolution\Gateway\Transaction::availableStates())
                ->default(\Parsisolution\Gateway\Transaction::STATE_INIT);
            $table->string('ip', 20)->nullable();
            $table->json('extra')->nullable();
            $table->timestamp('paid_at')->nullable();
            $table->nullableTimestamps();
            $table->softDeletes();
        });
    }

ستون user_id رو اضافه کردم که به ستون id تیبل users رفرنس داده شده

و این هم مایگریشن users

 Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->uuid('uuid');
            $table->string('first_name')->nullable();
            $table->string('last_name')->nullable();
            $table->string('email')->unique();
            $table->string('avatar_type')->default('gravatar');
            $table->string('avatar_location')->nullable();
            $table->string('password')->nullable();
            $table->timestamp('password_changed_at')->nullable();
            $table->tinyInteger('active')->default(1)->unsigned();
            $table->string('confirmation_code')->nullable();
            $table->boolean('confirmed')->default(config('access.users.confirm_email') ? false : true);
            $table->string('timezone')->nullable();
            $table->text('path')->nullable();
            $table->char('postal_code', 10)->nullable();
            $table->timestamp('last_login_at')->nullable();
            $table->string('last_login_ip')->nullable();
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
        });
تکنولوژی پایگاه-داده لاراول
سوال شده در مجتبی دلشاد
275 امتیاز

1
با چه کامندی migration رو اجرا میکنی؟ پیشنهاد من اینه که یک مرتبه ریست بکنی php artisan migrate:fresh --seed ــ سعید مرادی در 5 سال قبل

@سعید.مرادی php artisan migrate. این مورد رو هم تست کردم اما نشد ــ مجتبی دلشاد در 5 سال قبل
1
ببین وقتی میخوای یک رابطه (یا همون relation) بین 2 ستون بسازی، لازمش اینه که اون 2 ستون توی دیتابیس دقیقا ساختار مشابهی داشته باشن. به این معنی که نوع و اندازشون باید یکسان باشه. الان توی جدول users، ستون id به صورت unsigned نیست، ولی توی جدول gateway_transactions ستون user_id به صورت unsigned هست. پس نمیتونی بین این 2 تا ستون رابطه ایجاد کنی. کافیه ->unsigned() رو برای ستون user_id حذف کنی و مجددا php artisan migrate:fresh --seed رو بزنی. ــ سجاد شفی زاده در 5 سال قبل

@سجاد.شفی.زاده.★ بازهم نشد متاسفانه. کلی راجب این مشکل سرچ کردم و راه های مختلف رو که گفته بودن تست کردم اما حل نشد ــ مجتبی دلشاد در 5 سال قبل
2
خب یه کاری کن، بجای اینکه با ماگریشن های لاراول این ارتباط رو بسازی، به صورت دستی با phpmyadmin یا workbench امتحان کن ببین ساخته میشه یا نه. از اونجا شاید کنترل و دیباگ کردنش ساده تر باشه. اگه ارورش عوض شد یا با چیز جدیدی مواجه شدی با ما هم به اشتراک بزار شاید بتونیم کمک کنیم. ــ سجاد شفی زاده در 5 سال قبل

بله حتما تست میکنم. اما یه موردی وجود داره. توی مایگریشن اگه دقت کرده باشید انجین تیبل رو innoDB قرارداده و انجین تمام تیبل های پروژه MyISAM هستش. من برای مایگریشن این پکیج هم انجین MyISAM قرار دادم و بدون هیچ خطایی مایگریت انجام شد. اما یه مشکلی وجود داره حتما باید انجین تیبل پکیج innoDB باشه چون از transaction پشتیبانی کنه و قابلیت لاک کردن رکورد رو داشته باشه که برای پرداخت ها مشکلی بوجود نیاد.@سجاد.شفی.زاده.★ ــ مجتبی دلشاد در 5 سال قبل

حالا اومدم توی کانفیگ دیتابیس لاراول انجین رو innoDB قرار تا برای تمام جداول همین ست شه و این اتفاق هم افتاد اما مجددا بعد از مایگریت همون خطا دریافت شد...البته من اطلاعات زیادی ندارم و خیلی مطمئن نیستم که مشکل از متفاوت بودن انجین دو تیبل باشه@سجاد.شفی.زاده.★ ــ مجتبی دلشاد در 5 سال قبل
2
دوست عزیز، وقتی توی کامنت های میخوای به صورت کد بنویسی، کافیه کاراکتر ` رو قبل و بعد از متن مورد نظرت بزاری. احساس میکنم بیشتر از چیزی که باید میزاری ــ سعید مرادی در 5 سال قبل

500 کاراکتر باقی مانده

1 جواب

5

علت اینکه شما انجین دیتابیس رو از ‍‍innoDB به ‍‍MyISAM انتقال میدهید ارور بر طرف میشود این است که در انجین MyISAM کلید های خارجی یا foreign keys وجود ندارد.

مایگریشن gateway_transactions خود را به صورت زیر تغییر دهید

public function up()
    {
        Schema::create('gateway_transactions', function (Blueprint $table) {
            $table->engine = "innoDB";
            $table->unsignedBigInteger('id', true);
            $table->integer('user_id')->unsigned()->nullable();
            $table->enum('provider', \Parsisolution\Gateway\GatewayManager::availableDrivers());
            $table->decimal('amount', 15, 2);
            $table->integer('order_id')->nullable();
            $table->string('currency', 3)->nullable();
            $table->string('ref_id', 100)->nullable();
            $table->string('tracking_code', 50)->nullable();
            $table->string('card_number', 50)->nullable();
            $table->enum('status', \Parsisolution\Gateway\Transaction::availableStates())
                ->default(\Parsisolution\Gateway\Transaction::STATE_INIT);
            $table->string('ip', 20)->nullable();
            $table->json('extra')->nullable();
            $table->timestamp('paid_at')->nullable();
            $table->nullableTimestamps();
            $table->softDeletes();
        });

        Schema::table('gateway_transactions', function($table) {
           $table->foreign('user_id')->references('id')->on('users');
        });

    }
جواب داده شده در علی رضایی <m>★</m>
1139 امتیاز


ممنونم حل شد اما فقط زمانی که انجین تیبل users رو هم به innodb تغیر دادم. در رابطه با اون موردی که گفتید در انجین MyISAM کلید خارجی وجود ندارد سوالی داشتم , یه دوره اموزش پروژه محور بودش که انجین تمام جداول MyISAM قرار گرفته بود و مدرس برای جداول مورد نیاز کلید خارجی ایجاد میکرد و پراپرتی onDelete هم تعیین میکرد...تست هم شد و اوکی بود. راجب این مورد ممکنه توضیحی بدید (البته شاید بنده منظورتون رو درست متوجه نشده باشم) ــ مجتبی دلشاد در 5 سال قبل
1
@مجتبی.دلشاد در داکیمونت MySql به صراحت اعلام شده این انجین از کلید های خارجی پشتیبانی نمی کند. ــ علی رضایی در 5 سال قبل

500 کاراکتر باقی مانده


جواب شما
     
.....
×

×

جعبه لام تا کام


وب سایت لام تا کام جهت نمایش استاندارد و کاربردی در تمامی نمایشگر ها بهینه شده است.

تبلیغات توضیحی


داپ اَپ اولین پلتفرم کش‌بک در ایران
اگه میخوای از خریدهایی که میکنی، پاداش نقدی دریافت کنی داپ اَپ رو نصب کن.

تبلیغات تصویری