首页 文章

Laravel中的多对多关系

提问于
浏览
1

我正在尝试在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

我在域中 Build 了多对多的关系,即

public function themes()
{
    return $this->belongsToMany('Nitseditor\System\Models\Domain');
}

我把 domain_theme 中的表命名为 domain_theme

现在我正在尝试获取属于控制器中的域的主题名称,如下所示:

$flashmesage = new Domain;

foreach ($flashmesage->themes as $theme)
{
    return $theme->theme_name;
}

我收到一个错误:

SQLSTATE [42S02]:未找到基表或视图:1146表'nitswebbuilder.domain_domain'不存在(SQL:select domains . *,domain_domain.domain_id as domains_domain_id from domains inner join domain_domain on domains.id = domain_domain.domain_id其中domain_domain.domain_id为null且domains.deleted_at为null)

2 回答

  • 0

    对不起我的简短评论作为回答...我没有足够的评论声誉,

    将您的 themes() 方法更改为:

    public function themes()
    {
        return $this->belongsToMany('Nitseditor\System\Models\Theme');
    }
    

    有关详细信息,请参阅Here

  • 1

    表名应该被称为 domain_theme . 如果您使用了外键的正确名称并 Build 了正确的关系,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
    

相关问题