سلام
قاعدتا برای بار اول که میخوایم پروژٰه رو 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()
درود خوبی...
توی مدل جدولی که تعریف کردید, کد زیر وارد کنید:
protected $table = 'setting_translations';
ممنون @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()
چون مایگریشن های پروژه خیلی قدیمی بودن و تغیرات زیادی رو روی خود دیتابیس mysql انجام داده بودن من مجبور شدم با یه پکیجی تمام جدول هارو آنالیز کنم و بسازم چون بصورت دستی خیلی خیلی طول میکشید @Raymond @FullStack
sections_migration:
@m.reza6920
خب به نظر میاد توی لاراول قدیمی هست و اجرا آن دردسرسازه...
سعی کنید پروژه رو به نسخه ۱۰ ارتقا دهید....
@Raymond پروژه روی ورژن ۹ هست:
"laravel/framework": "^9.0",
یعنی اگر پروژه رو به ۱۰ ارتقا بدم درست میشه؟
فکر کنم دلیل ارور بخاطر تغییر شکل کدهای تعریف کلاس در ورژن های مختلف لاراول باشه.
ظاهرا پکیجی که ازش برای آنالیز کردن مایگریشن ها استفاده کردم قدیمی بوده.
و فکر کنم باید از:
return new class extends Migration
به:
class CreateUsersTable extends Migration
تغییر بدم تا درست بشه.
@Raymond
@FullStack
@m.reza6920
پس قبلا ارتقا داده و نیازی نیست...
احتمالا رابطه توی مدل تعریف نشده:
public function section()
{
return $this->belongsTo(Section::class);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟