۸ محمدجوکار
ماندن table در حالت pending
جامعه پی اچ پی ایجاد شده در ۱۲ اسفند ۱۴۰۱

با سلام

چرا باید این حالت بمونه؟

a4b0-Screenshot (23).png

و سوال دومم:

وقتی که داشتم دستور php artisan migrate رو میزدم، با ارورِ مربوط به کلیدهای خارجی در جدول محصولاتی که تعریف کردم برخوردم. متاسفانه نشد شات بگیرم و فراموشم شد.

اما در phpmyadmin این table به جدولم اضافه شد و فقط کلیدهای خارجی قرار نگرفته بودن. با این حال که کدهاش توی همین صفحه زده شده و نمیدونم کجاش مشکل داره.

eed8-Screenshot (24).png

الان هم که میخوام مابقی رو بفرستم روی دیتابیسم، بهم ارور میده چون جدول محصولات وجود داره ولی خب در حالت pending مونده.

چ کنم من با این؟

9882-Screenshot (26).png

محمدجوکار ۱۲ اسفند ۱۴۰۱، ۰۱:۲۰

سلام محمد جان، اون جدولی که کلیدهای خارجیش ثبت نشده رو بفرست تا چک کنم ببینم مشکل کجاست.

در مورد پیام دومتون میتونین از دستور php artisan migrate:fresh استفاده کنید تا ابتدا تمام جداول ساخته شده در دیتابیس رو پاک کنه و دوباره عملیات مایگریت رو انجام بده.

صادق برزگر ۱۲ اسفند ۱۴۰۱، ۰۲:۱۴

ممنون از پاسخگویی آقای برزگر

دستور رو زدم این اتفاق افتاد

cc07-Screenshot (27).png


و ضمنا چیزی به دیتابیسم اضافه نشد. باز همون حالت قبلیه‌س

اینم کدهای صفحه‌ی محصولات که نمیدونم چرا باز ارور داده براش:

1a71-Screenshot (28).png


<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->char('title');
            $table->text('description');
            $table->char('thumbnail_url');
            $table->char('demo_url');
            $table->char('source_url');
            $table->unsignedInteger('price');
            $table->timestamps();
            $table->unsignedBigInteger('category_id');
            $table->foreign('category_id')->references('id')->on('category')->onDelete('cascade');
            
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }
    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};
‍
محمدجوکار ۱۲ اسفند ۱۴۰۱، ۰۲:۲۰

و همچنان :

e096-Screenshot (30).png

محمدجوکار ۱۲ اسفند ۱۴۰۱، ۰۲:۲۲

کد زیر رو تست کنید ببینید درست میشه :

در توضیحات اصلاحاتی که صورت گرفت باید بگم که در لاراول جدید یعنی نسخه 9 و 10 بجای استفاده از foreign به شکل سابق میشه از foreignId استفاده کرد که مستقیم هم فیلد رو میسازه و هم رابطه رو ایجاد میکنه. (میتونید مستندات لاراول رو برای اطلاعات بیشتر مطالعه کنید)

بجای char هم بهتره از string استفاده بشه که مرسوم‌تر هست.

use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->foreignId('category_id')->constrained()->onDelete('cascade');
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->string('title');
            $table->text('description');
            $table->string('thumbnail_url');
            $table->string('demo_url');
            $table->string('source_url');
            $table->unsignedInteger('price');
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('products');
    }
}
صادق برزگر ۱۲ اسفند ۱۴۰۱، ۰۲:۳۹

ارور مربوط به پروداکتس رو دیگه نداد

ولی الان با دستوری که وارد میکنم، اومده orders رو fail کرده

اونم طبق روش شما زدم کدهاشو ولی اکی نشد

ded4-Screenshot (31).png


e022-Screenshot (32).png

محمدجوکار ۱۲ اسفند ۱۴۰۱، ۰۲:۴۷

سلام،

  1. اسم جدول categories رو اشتباه نوشتی.
  2. همونطور که گفته شد جایی که طول ثابتی قرار نیست ذخیره بشه از varchar استفاده بشه. چون char طولش ثابته یعنی مثلا اگر char 30 تعریف شده باشه و مقداری که ذخیره میشه طولش 5 باشه بازم 30 خانه از حافظه پرمیشه.(25 تاش فضای خالی) ولی varchar به اندازه طول مقدار خواهد بود. خب بالتبع بخاطر ثابت بودن طول char در sort و search سریعتر از varchar خواهد بود(در حجم بالا). مثلا از char میشه برای هش پسورد با طول ثابت استفاده کرد.
  3. بجای int باید از integer استفاده کنی.


بهترین پاسخ
محسن موحد ۱۲ اسفند ۱۴۰۱، ۰۵:۰۲

ممنونم

چنتا اشتباه املایی و خطا بود که با کمک شما حل شد

ممنون از آقای موحد و جناب برزگر

محمدجوکار ۱۳ اسفند ۱۴۰۱، ۲۲:۱۸