我试图在Laravel 5.3上构建一个应用程序,我的模型,数据库和控制器位于不同的文件夹中。我有以下文件夹结构:
Nitseditor
System
Controllers
Database
2016_12_28_130149_create_domains_table.php
2017_01_06_193355_create_themes_table.php
2017_01_07_140804_create_themes_domains_table.php
Models
Domain.php
Theme.php
我在域中建立了多对多关系,即
public function themes()
{
return $this->belongsToMany('Nitseditor\System\Models\Domain');
}
我已将domain_theme
2017_01_07_140804_create_themes_domains_table.php
命名为
现在我试图获取属于控制器中域名的主题名称:
$flashmesage = new Domain;
foreach ($flashmesage->themes as $theme)
{
return $theme->theme_name;
}
我收到错误:
SQLSTATE [42S02]:未找到基表或视图:1146表' nitswebbuilder.domain_domain'不存在(SQL:选择
domains
。*,domain_domain
。domain_id
作为pivot_domain_id
来自domains
内部联接domain_domain
{ {1}}。domains
=id
。domain_domain
其中domain_id
。domain_domain
为空且domain_id
。domains
为空)
答案 0 :(得分:1)
对不起我的简短评论作为回答......我没有足够的评论声誉,
将您的themes()
方法更改为:
public function themes()
{
return $this->belongsToMany('Nitseditor\System\Models\Theme');
}
请参阅Here了解详情
答案 1 :(得分:0)
表名称应称为domain_theme
。如果您使用了外键的正确名称并建立了正确的关系,whereHas()
将适合您:
$domainName = 'example.com';
$themes = Theme::whereHas('domains', function($q) ($domainName) {
$q->where('domain_name', $domainName);
})->get();
然后显示所有主题名称:
@foreach ($themes as $theme)
{{ $theme->theme_name }}
@endforeach