当存在多个关系时,使用via()或viaTable()显示属性 - YII2

时间:2017-04-13 06:35:02

标签: php yii2 yii2-advanced-app

我有模型说,供应商 - 机器,供应商,供应商到零件和零件。 enter image description here

这就是这些表彼此相关的方式。

在供应商模型中,关系定义如下,以检索零件表的part_name,将供应商与零件保持为联结表。

public function getSupplierToParts()
{
    return $this->hasMany(SupplierToPart::className(), ['supplier_id' => 'id']);
}


public function getParts()
{
    return $this->hasMany(Part::className(), ['id' => 'part_id'])->viaTable('supplier_to_part', ['supplier_id' => 'id']);
}

在详细信息视图中,我使用implode来显示part_name

[
    'attribute'=>'Nature of business',
    'value' => implode(\yii\helpers\ArrayHelper::map($model->parts, 'id', 'part_name')),

    ],

我的问题是如何在供应商 - 机器模型中显示part_name而不是供应商模型?在这种情况下,我认为供应商和供应商之间的关系变得像两个交汇点。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以通过$model->supplier->parts通过供应商关系访问零件,假设您在SupplierMachine模型中与供应商的关系为supplier。您仍然需要考虑多个部分:

'value' => implode(",", 
    \yii\helpers\ArrayHelper::map($model->supplier->parts, 'id', 'part_name')
),