【问题标题】:Laravel model referencing wrong table in queryLaravel 模型在查询中引用了错误的表
【发布时间】:2017-07-21 00:40:10
【问题描述】:

我确定这是因为雄辩,但是查询使用了SELECT中的错误表。

这是我的模型:

class Subcategory extends Model
{
    public function subcategory()
    {
        return $this->belongsTo(Category::class);
    }
}

这是我的控制器:

class SubcategoriesController extends Controller
{
    public function index()
    {

        $subcategories = Subcategory::all();

        return view('pages.subcategories', compact('subcategories'));

    }
}

最后是我的错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'developmnet.site.subcategories' doesn't exist (SQL: select * from `subcategories` where `category_slug` = budgets limit 1)

从错误中可以看出,查询中引用的表是subcategories,而应该是categories 表。

我的问题是如何在这个模型中引用正确的表格,因为我已经有一个用于我的主要类别的表格,而且它工作得很好。

【问题讨论】:

  • 为什么你认为应该是categories?你的类名是Subcategory,所以如果你不覆盖它,表名就是subcategories
  • 原因是我的DB 中实际上没有名称为subcategories 的表。所以如果我要覆盖这个,我该怎么做呢?

标签: mysql laravel-5 model laravel-eloquent


【解决方案1】:

要覆盖模型的表名,您可以定义protected $table 属性。在你的情况下:

class Subcategory extends Model
{
    protected $table = 'categories';

    // ..
}

如果你不这样做,Laravel 将从类名派生表名。在您的情况下:Subcategory => subcategories

【讨论】:

  • 现在完美了,感谢您的帮助和解释,现在我对它的工作原理有了更多的了解
猜你喜欢
  • 2020-09-10
  • 2017-07-28
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2020-01-25
  • 2014-06-26
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多