راکت

چرا بعد از اجرای php artisan migrate ارور میگیرم که جدول X وجود نداره

10 پاسخ

سلام
قاعدتا برای بار اول که میخوایم پروژٰه رو run کنیم هیچ table ای نداریم توی database
پس میایم و دستور php artisan migrate رو اجرا میکنیم که برامون جداول رو همراه با روابطشون بسازه.
حالا توی سیستم و پروژه من بعد از اجرای این دستور ارور میگیرم که میگه این جدول وجود نداره و این مقدار داخلش نیست!!!
خب مگه اینطوری نیست که باید برای من جداول رو بسازه بعدا اگر جایی یک request رفت به database و اون موقع همچنین table ای وجود نداشت ارور بده؟؟
و حتی برای ارور مقادیر هم من اون مقدار مورد نیازش رو با استفاده از php artisan db:seed توی tables میریزم!!
خب چرا ارور میده؟؟
دوستان اروری که میگیرم:

php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'penlms.setting_translations' doesn't exist (SQL: select * from `setting_translations` where `setting_translations`.`setting_id` = 53 and `setting_translations`.`setting_id` is not null)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:760
    756▕         // If an exception occurs when attempting to run a query, we'll format the error
    757▕         // message to include the bindings with SQL, which will make this exception a
    758▕         // lot more helpful to the developer instead of just the database's errors.
    759▕         catch (Exception $e) {
  ➜ 760▕             throw new QueryException(
    761▕                 $query, $this->prepareBindings($bindings), $e
    762▕             );
    763▕         }
    764▕     }

  i   A table was not found: You might have forgotten to run your database migrations. 
      https://laravel.com/docs/master/migrations#running-migrations

  1   [internal]:0
      Illuminate\Foundation\Application::Illuminate\Foundation\{closure}()

      +21 vendor frames 
  23  app/Models/Setting.php:137
      Illuminate\Database\Eloquent\Model::__get()
ثبت پرسش جدید

پاسخ‌ها

10
رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

درود خوبی...
توی مدل جدولی که تعریف کردید, کد زیر وارد کنید:

protected $table = 'setting_translations';
محمدرضا فلکی
محمدرضا فلکی
@m.reza6920

تخصص: Learning Laravel

ممنون @Raymond
اومدم که امتحانش کنم دیدم اسم جدول تغییر کرده به sections
و رفتم توی مدل Section و اونجا تعریف کردم که:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Section extends Model
{
    public $timestamps = false;

    protected $guarded = ['id'];

    protected $table = 'sections';

    public function children() {
        return $this->hasMany($this, 'section_group_id', 'id');
    }
}

و بعدش که دستور php artisan migrate رو ران کردم دوباره ارور گرفتم:

 php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'penlms.sections' doesn't exist (SQL: select * from `sections`)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:760
    756▕         // If an exception occurs when attempting to run a query, we'll format the error
    757▕         // message to include the bindings with SQL, which will make this exception a
    758▕         // lot more helpful to the developer instead of just the database's errors.
    759▕         catch (Exception $e) {
  ➜ 760▕             throw new QueryException(
    761▕                 $query, $this->prepareBindings($bindings), $e
    762▕             );
    763▕         }
    764▕     }

  i   A table was not found: You might have forgotten to run your database migrations. 
      https://laravel.com/docs/master/migrations#running-migrations

  1   [internal]:0
      Illuminate\Foundation\Application::Illuminate\Foundation\{closure}()

      +12 vendor frames 
  14  app/Providers/AuthServiceProvider.php:42
      Illuminate\Database\Eloquent\Model::all()

شاید پاسخ شما همین‌جا باشد

میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

سلام وقت بخیر دوست عزیز میشه کد های مایگریشن sections رو هم بزاری یا اسکرین شات بدی؟

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@m.reza6920
جدول sections وجود داره؟ کدشو بزار ببینیم...

محمدرضا فلکی
محمدرضا فلکی
@m.reza6920

تخصص: Learning Laravel

چون مایگریشن های پروژه خیلی قدیمی بودن و تغیرات زیادی رو روی خود دیتابیس mysql انجام داده بودن من مجبور شدم با یه پکیجی تمام جدول هارو آنالیز کنم و بسازم چون بصورت دستی خیلی خیلی طول میکشید @Raymond @FullStack
sections_migration:
 تصویر

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@m.reza6920
خب به نظر میاد توی لاراول قدیمی هست و اجرا آن دردسرسازه...
سعی کنید پروژه رو به نسخه ۱۰ ارتقا دهید....

محمدرضا فلکی
محمدرضا فلکی
@m.reza6920

تخصص: Learning Laravel

@Raymond پروژه روی ورژن ۹ هست:

"laravel/framework": "^9.0",

یعنی اگر پروژه رو به ۱۰ ارتقا بدم درست میشه؟

محمدرضا فلکی
محمدرضا فلکی
@m.reza6920

تخصص: Learning Laravel

فکر کنم دلیل ارور بخاطر تغییر شکل کدهای تعریف کلاس در ورژن های مختلف لاراول باشه.
ظاهرا پکیجی که ازش برای آنالیز کردن مایگریشن ها استفاده کردم قدیمی بوده.
و فکر کنم باید از:

return new class extends Migration

به:

class CreateUsersTable extends Migration

تغییر بدم تا درست بشه.
@Raymond
@FullStack

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@m.reza6920
پس قبلا ارتقا داده و نیازی نیست...
احتمالا رابطه توی مدل تعریف نشده:

public function section()
{
    return $this->belongsTo(Section::class);
}
رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

@m.reza6920
این قسمت کلاس new میگریشن دست نزن و درسته...

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام