Laravel中的多对多关系

时间:2017-01-07 15:11:21

标签: laravel many-to-many laravel-5.3 laravel-eloquent

我试图在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_domaindomain_id作为pivot_domain_id来自domains内部联接domain_domain { {1}}。domains = iddomain_domain其中domain_iddomain_domain为空且domain_iddomains为空)

2 个答案:

答案 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