【问题标题】:Laravel 5.4: Pivot tableLaravel 5.4:数据透视表
【发布时间】:2017-12-15 09:55:49
【问题描述】:

其实我的问题很简单,但是我找不到答案。

我正在使用 Laravel eloquent,我有 3 个表:

company_types
-id
-name

document_types
-id
-name

还有一个名为:

company_type_document_type
-company_type_id
-document_type_id
-is_default

我已经从公司对象中获得了company_type_id,我正在尝试获取document_typename 像这样:

controller...
$document_type = CompanyTypesDocumentTypes::where('company_type_id',$company->company_type_id)->with('document_type')->where('is_default',true)->first();

view...
{{ $document_type->name }}

我确定问题出在我的模型上,但问题是我真的不明白何时使用“hasMany”或“BelongsToMany”等... 另外,我认为数据透视表的名称可能有问题,因为下划线太多

感谢您的帮助!

【问题讨论】:

    标签: php laravel laravel-5 eloquent laravel-eloquent


    【解决方案1】:

    由于是多对多,所以应该使用wherePivot()方法。

    定义关系:

    public function defaultDocumentTypes()
    {
        return $this->belongsToMany(DocumentType::class)->wherePivot('is_default', 1);
    }
    

    那么就可以使用这个关系来获取文档类型了:

    $companyType = CompanyType::find($companyTypeId);
    $documentTypes = $companyType->defaultDocumentTypes()->get();
    

    在视图中显示它们:

    @foreach ($documentTypes as $documentType)
        {{ $documentType->name }}
    @endforeach
    

    【讨论】:

    • 我应该在哪里定义关系?似乎您在 CompanyType 模型中定义,但我无法在模型中调用模型
    • 我将表的名称更改为 company_type_document_type(它是 company_types_document_types,我忘记在问题中写了),我还将这一行:return $this->belongsToMany(DocumntType::class)->wherePivot('is_default', 1); 更改为:return $this->belongsToMany(CompanyType::class)->wherePivot('is_default', 1);
    • 应该在CompanyType模型中定义,但应该返回DocumentType关系:return $this->belongsToMany(DocumentType::class)->wherePivot('is_def‌​ault', 1);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2018-08-21
    • 2017-07-03
    • 2017-09-19
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多