Laravel 中的多对多关系
Many to many relationship in Laravel
我正在尝试在 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');
}
我在 2017_01_07_140804_create_themes_domains_table.php
中命名了 table domain_theme
现在我正在尝试获取属于控制器中域的主题名称,如下所示:
$flashmesage = new Domain;
foreach ($flashmesage->themes as $theme)
{
return $theme->theme_name;
}
我遇到一个错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'nitswebbuilder.domain_domain' doesn't exist (SQL: select domains
.*, domain_domain
.domain_id
as pivot_domain_id
from domains
inner join domain_domain
on domains
.id
= domain_domain
.domain_id
where domain_domain
.domain_id
is null and domains
.deleted_at
is null)
Table 名字应该叫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
抱歉我的简短评论作为回答...我没有足够的评论声誉,
将您的 themes()
方法更改为:
public function themes()
{
return $this->belongsToMany('Nitseditor\System\Models\Theme');
}
有关详细信息,请参阅 Here
我正在尝试在 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');
}
我在 2017_01_07_140804_create_themes_domains_table.php
domain_theme
现在我正在尝试获取属于控制器中域的主题名称,如下所示:
$flashmesage = new Domain;
foreach ($flashmesage->themes as $theme)
{
return $theme->theme_name;
}
我遇到一个错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'nitswebbuilder.domain_domain' doesn't exist (SQL: select
domains
.*,domain_domain
.domain_id
aspivot_domain_id
fromdomains
inner joindomain_domain
ondomains
.id
=domain_domain
.domain_id
wheredomain_domain
.domain_id
is null anddomains
.deleted_at
is null)
Table 名字应该叫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
抱歉我的简短评论作为回答...我没有足够的评论声誉,
将您的 themes()
方法更改为:
public function themes()
{
return $this->belongsToMany('Nitseditor\System\Models\Theme');
}
有关详细信息,请参阅 Here