当我点击此路线并执行以下代码时。
Post_Like::create([
'like' => 1,
'post_id' => 1,
'user_id' => 2,
]);
发生以下错误。
表'database.post__likes'不存在
这是我的迁移文件。在我错误拼写表名之前。当它被认为是post_likes时,我输入了post__likes。所以我删除了那个迁移文件并创建了一个新文件。现在我输入了post_likes。但现在它一直说post__likes表不存在。它假设使用post_likes而不是post__likes。
旧迁移文件:2018_03_03_114895_create_post__likes_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostLikesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('post__likes', function (Blueprint $table) {
$table->increments('id');
$table->boolean('like');
$table->integer('post_id');
$table->integer('user_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('post__likes');
}
}
新迁移文件:2018_03_03_248923_create_post_likes_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostLikesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('post_likes', function (Blueprint $table) {
$table->increments('id');
$table->boolean('like');
$table->integer('post_id');
$table->integer('user_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('post_likes');
}
}
Post_Like模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post_Like extends Model
{
protected $fillable = ['like', 'post_id'];
// $post_like->post
public function post()
{
return $this->belongsTo(Post::Class); // App\Post
}
}
答案 0 :(得分:1)
尝试将表格引用添加到模型中,如下所示:
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'post_likes';
答案 1 :(得分:0)
检查您的数据库,迁移表,查找和删除post__likes行。
必须看起来像这样: 2018_03_4_000000_post__likes
答案 2 :(得分:0)
我希望你可能已经解决了这个问题,因为@Paras为你指出了这个问题。我想稍微详细一点。
Laravel遵循简单的命名约定。表名称应为模型名称的复数。对于包含多个单词的模型,如Post_Like,命名约定是使用CamelCase而不是snake_case,因此正确的命名将是PostLike,因此生成的迁移将是laravel期待post_like的。当你创建snake_case模型时,你必须在post__likes之类的单词之间创建带有双下划线的迁移,如果你想覆盖命名约定,你只需要使用模型$ table上的属性。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post_Like extends Model
{
protected $fillable = ['like', 'post_id'];
protected $table = "post__likes";
// $post_like->post
public function post()
{
return $this->belongsTo(Post::Class); // App\Post
}
}