[英]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 \\ Community和App \\ idea 。
为了找到相关的模型,Eloquent将在数据透视表中查找匹配的行-在您的情况下,应将其命名为community_idea并具有3个字段: community_id , idea_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
的原因是因为模型名称不匹配。 最好使用大写的类名(在某些特定环境下),因此请确保以下几点:
Idea
,它的文件名为Idea.php
namespace App;
composer dump-autoload
来更新自动加载器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.