繁体   English   中英

SQLSTATE [42S02]:找不到基表或视图

[英]SQLSTATE[42S02]: Base table or view not found laravel

因此,马上解决问题。 有人告诉我,如果我们只想要表的ids ,就不需要创建pivot table表。 laravel可以自己处理这种情况。 我不知道这是如何工作的。 我有一个餐桌community和另一个餐桌idea 关系就是这样;

一个社区可以包含许多想法,并且可以在许多社区中找到一个想法。

想法模型中的关系:

 public function community() {
        return $this->belongsToMany('App\Community')->withTimestamps();
    }

社区关系模型:

 public function idea() {
        return $this->belongsToMany('App\idea');
    }

现在,我想获取与单个社区有关的所有记录,以在其页面上显示假设社区是Arts

这是控制器功能:

 public function showCommunities($id) {
    $community = Community::findOrFail($id)->community()->get();
    return view('publicPages.ideas_in_community', compact('community'));
   }

当我将->community()->get()附加到Community::findOrFail($id) ,它将引发错误

SQLSTATE [42S02]:找不到基表或视图

任何帮助,将不胜感激。

编辑:

逻辑上,这段代码Community::findOrFail($id)->community()->get()应该类似于Community::findOrFail($id)->idea()->get() 现在是对的,但是没有什么问题。 它抛出一个错误

致命错误:找不到类“ App \\ idea”

定义多对多关系的方式看起来不错-我将它们称为community()idea() ,因为它们将返回对象的集合,而不是单个对象。

确保使用正确的类名称-我可以看到您使用不同的大小写引用模型类-请参见App \\ CommunityApp \\ idea

为了找到相关的模型,Eloquent将在数据透视表中查找匹配的行-在您的情况下,应将其命名为community_idea并具有3个字段: community_ididea_id和autoincrement主键id

有了这一点,您应该能够通过以下方式将所有想法与给定社区相关联:

$ideas = Community::findOrFail($communityId)->ideas;

如果您需要与给定想法相关的社区,请执行以下操作:

$communities = Idea::findOrFail($ideaId)->communities;

您可以在此处阅读有关如何使用多对多关系的更多信息: https : //laravel.com/docs/5.1/eloquent-relationships#many-to-many

有人告诉我,如果我们只想要表的ID,就不需要创建数据透视表

上面的说法不正确(除非我只是误解了)。

对于多对多( belongsToMany ),它们必须是两个相关表,然后是中间( pivot )表。 中间表将包含表1的主键和表2的主键。

在laravel中,主表的命名约定为复数形式,即Community ='communities'和Idea ='ideas'。 数据透视表名称将从相关模型名称的字母顺序得出,即community_idea

现在,如果您不想/不能遵守这些约定,那绝对没问题。 有关更多信息,请参阅文档: https : //laravel.com/docs/5.2/eloquent-relationships#many-to-many

一旦对拥有必要表和必要字段的表感到满意,就可以通过以下方式访问关系:

$ideas = $community->ideas()->get();

//or

$ideas = $community->ideas;

所以您的控制器看起来像:

public function showCommunities($id)
{
    $community = Community::findOrFail($id);

    //The below isn't necessary as you're passing the Model to a view
    // but it's good for self documentation

    $community->load('ideas');

    return view('publicPages.ideas_in_community', compact('community'));
}

或者,您可以将想法添加到传递给视图的数据数组中,以使它更加冗长:

public function showCommunities($id)
{
    $community = Community::findOrFail($id);

    $ideas = $community->ideas

    return view('publicPages.ideas_in_community', compact('community', 'ideas));
}

希望这可以帮助!

更新

我想您收到未找到App\\idea的原因是因为模型名称不匹配。 最好使用大写的类名(在某些特定环境下),因此请确保以下几点:

  1. 您的班级名称是Idea ,它的文件名为Idea.php
  2. 该类具有声明的名称空间,即namespace App;
  3. 如果添加了新类,但找不到该类,则可能需要从命令行运行composer dump-autoload来更新自动加载器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM