【问题标题】:Laravel - Table does not existLaravel - 表不存在
【发布时间】:2017-08-07 13:54:50
【问题描述】:

我用php artisan make:migration 命令创建了一个表。之后,我编辑迁移文件以放置列并插入标准数据。 在我运行php migrate:referesh 命令并且一切正常后,我转到数据库,并且该表存在正确的名称和数据。

在数据库中,表名是rolesStems。

我创建了一个这样的模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class RolesStems extends Model
{
    protected $fillable = ['id', 'value', 'order', 'active','id_stem', 'id_role'];
}

在我的控制器中我这样做:

use App\RolesStems as RolesStem;   
RolesStem::select('value')->where('active', '=', 1)->where('id_stem', '=', 1)->orderBy('id_role', 'asc')->get());

我有这个错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dbname.roles_stems' doesn't exist (SQL: select `value` from `roles_stems` where `active` = 1 and `id_stem` = 1 order by `id_role` asc)

它放了一个未知的表名roles_stems,为什么?

我以同样的方式对其他表执行此操作,但在此表中会发生这种情况。

有什么问题?

【问题讨论】:

    标签: php mysql laravel database-migration


    【解决方案1】:

    因为你没有关注Laravel naming conventions,所以你应该手动定义表:

    protected $table = 'your_table_name';
    

    【讨论】:

    【解决方案2】:

    对于名称为rolesStems 的表,您的model 必须具有名称RolesStem

    所以更改以下行:

    class RolesStems extends Model
    

    class RolesStem extends Model
    

    这是默认的 Laravel 命名约定Reference

    如果您不想遵循此命名约定,请将以下代码放入您的模型中:

    protected $table = 'your_table_name';
    

    这样你的模型引用your_table_name

    【讨论】:

      【解决方案3】:

      @user3242861,默认情况下,Laravel 尝试根据您的模型类名称查找表,例如:您的类“RolesStems”然后它将尝试查找表“roles_stems”,因此如果它不可用,那么它将不提供表或视图存在。

      要覆盖默认功能,您可以在模型类中显式定义表名,如下所示。

      protected $table = 'your_table_name';
      

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 2018-11-27
        • 2022-11-22
        • 2021-11-17
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多