Laravel一直使用旧的迁移表

时间:2018-03-03 21:38:57

标签: laravel laravel-5

当我点击此路线并执行以下代码时。

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
    }

}

3 个答案:

答案 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
    }

}