我已经尝试解决几个小时的问题。
基本上我会得到:
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();
});
当我在视图中按下“创建”按钮时,应该将其添加到数据库中,并将用户和位置作为外键链接到该图像,然后弹出该错误。
谢谢!
答案 0 :(得分:0)
错误来自
public function locations()
{
return $this->belongsToMany(Location::class);
}
Laravel假定您具有按字母顺序命名的中间表,因为中间表是image_location
,并且该表在您的数据库中不存在。
唯一的方法是创建这样的表,或者如果您创建了具有不同名称的表,则可以传递第二个参数作为表名。这样就变成了:
public function locations()
{
return $this->belongsToMany(Location::class, 'TABLE_NAME');
}