SQLSTATE [42S02]:找不到基表或视图:1146错误laravel

时间:2019-04-07 21:10:14

标签: laravel

我已经尝试解决几个小时的问题。

基本上我会得到:

  

SQLSTATE [42S02]:找不到基表或视图:1146表'tp-laravel.image_location'不存在(SQL:从location_id中选择image_location,其中image_id = 3)错误。

这是否来自错误的控制器/模型/迁移?当我尝试在网站中添加图片时就会发生这种情况。

我一直在尝试更改内容,添加内容并在Google上进行很多查找,但没有任何解决方法。

Image.php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Image extends Model
{
    protected $fillable = ['name'];

    public function locations()
    {
        return $this->belongsToMany(Location::class);
    }

    public function getUpdatedAtAttribute($date)
    {
        return Carbon::parse($date)->locale('fr')->diffForHumans(Carbon::now());
    }
}

Location.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Location extends Model
{
    protected $fillable = ['name'];

    public function locations()
    {
        return $this->belongsToMany(Image::class);
    }
}

这是我的控制器中的创建和存储方法:

    public function create()
    {
        $locations = Location::pluck('name', 'id');
        $users = User::pluck('name', 'id');
        return view('posts.create', compact('locations'));
    }

    public function store(Request $request)
    {
        $image = Image::create(request()->all());
        $image->locations()->sync(request()->get('locations'));
        $user->users()->sync(request()->get('users'));
        return redirect('/accueil');
    }

最后是我的图片迁移

    Schema::create('images', function (Blueprint $table) {
            $table->bigIncrements('id');

            $table->BigInteger('location_id')->unsigned()->index();

            $table->BigInteger('user_id')->unsigned()->index();

            $table->foreign('location_id')->references('id')->on('locations')->onDelete('cascade');

            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->string('name', 100);

            $table->timestamps();
        });

当我在视图中按下“创建”按钮时,应该将其添加到数据库中,并将用户和位置作为外键链接到该图像,然后弹出该错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

错误来自

    public function locations()
    {
        return $this->belongsToMany(Location::class);
    }

Laravel假定您具有按字母顺序命名的中间表,因为中间表是image_location,并且该表在您的数据库中不存在。

唯一的方法是创建这样的表,或者如果您创建了具有不同名称的表,则可以传递第二个参数作为表名。这样就变成了:

    public function locations()
    {
        return $this->belongsToMany(Location::class, 'TABLE_NAME');
    }