如何在多对多关系中获取其他字段?yii2

如何在多对多关系中获取其他字段?yii2,yii2,many-to-many,relationships,Yii2,Many To Many,Relationships,请帮帮我 我有桌子: 商品带字段: id int(11) 名称varchar(255) 订单带字段: id int(11) 身份识别信息(2) 订单\u货物带字段: id int(11) 订单号(11) 良好的身份证明(11) 金额(5) 我想从同一行收到订单中的所有货物,包括货物id和额外的字段金额。之后,在视图中,我希望以以下格式显示所有订单商品: 姓名(金额) 姓名(金额) 姓名(金额) 现在在订单模型中,我有一种接收订单货物的方法: public function getGo

请帮帮我

我有桌子:

商品带字段:

  • id int(11)
  • 名称varchar(255)
  • 订单带字段:

  • id int(11)
  • 身份识别信息(2)
  • 订单\u货物带字段:

  • id int(11)
  • 订单号(11)
  • 良好的身份证明(11)
  • 金额(5)
  • 我想从同一行收到订单中的所有货物,包括货物id和额外的字段金额。之后,在视图中,我希望以以下格式显示所有订单商品:

    • 姓名(金额)
    • 姓名(金额)
    • 姓名(金额)
    现在在订单模型中,我有一种接收订单货物的方法:

        public function getGoods()
        {
            return $this->hasMany(Goods::className(), ['id' => 'good_id'])->viaTable(
                'orders_goods', ['order_id' => 'id'],
                function($query) {
                    return $query->select('*')->from('orders_goods')->where(["order_id" => $this->id]);
                }
            );
        }
    
    public function getOrderGoods()
    {
      return $this->hasMany(OrdersGoods::className(), ['order_id'=> 'id'])->select(['amount']);
    }
    
    在GridView中,我展示了好名字:

        [
                'label' => 'Goods',
                'value' => function ($model) {
                        return implode("\n", ArrayHelper::map($model->goods, 'id', 'name'));
                },
        ],
    
    如何将“金额”字段中的商品数量添加到GridView中的显示中?在没有额外中间模型的情况下,是否可以做到这一点

    “”。打印($model->goods,true)。“”

    结果:

    
    排列(
    [0]=>app\models\Goods对象(
    [\u attributes:yii\db\BaseActiveRecord:private]=>数组(
    [id]=>1
    [名称]=>猴子金
    )
    [\u oldAttributes:yii\db\BaseActiveRecord:private]=>数组(
    [id]=>1
    [名称]=>猴子金
    )
    [\u-related:yii\db\BaseActiveRecord:private]=>数组()
    [\u relationsDependencies:yii\db\BaseActiveRecord:private]=>数组()
    [\u错误:yii\base\Model:private]=>
    [\u验证程序:yii\base\Model:private]=>
    [\u场景:yii\base\Model:private]=>默认值
    [\u事件:yii\base\Component:private]=>数组()
    [\u eventWildcards:yii\base\Component:private]=>Array()
    [\u行为:yii\base\Component:private]=>数组()
    )
    [1] =>应用程序\模型\商品对象(
    [\u attributes:yii\db\BaseActiveRecord:private]=>数组(
    [id]=>2
    [名称]=>猴子绿
    )
    [\u oldAttributes:yii\db\BaseActiveRecord:private]=>数组(
    [id]=>2
    [名称]=>猴子绿
    )
    [\u-related:yii\db\BaseActiveRecord:private]=>数组()
    [\u relationsDependencies:yii\db\BaseActiveRecord:private]=>数组()
    [\u错误:yii\base\Model:private]=>
    [\u验证程序:yii\base\Model:private]=>
    [\u场景:yii\base\Model:private]=>默认值
    [\u事件:yii\base\Component:private]=>数组()
    [\u eventWildcards:yii\base\Component:private]=>Array()
    [\u行为:yii\base\Component:private]=>数组()
    )
    )
    
    我问是否可以在不添加中间模型的情况下执行此操作。显然,这是不可能做到的。因此,我这样做:

    我在订单模型中添加了模型OrdersGoods,relation
    hasMany()

    在GridView中:

    [
    “标签”=>“货物”,
    “值”=>函数($model){
    $goodscont=计数($model->goods);
    $resultValue=“”;
    
    对于($i=1;$i
    $model->goods
    值是什么?这是
    getGoods()
    函数返回的值。添加
    print\r($model->goods)的结果;
    add in question..print\r返回的内容。您可以在订单模型中创建
    hasMany()
    与订单商品的关系。
    public function getOrderGoods()
    {
      return $this->hasMany(OrdersGoods::className(), ['order_id'=> 'id'])->select(['amount']);
    }
    
    [
        'label' => 'Goods',
        'value' => function ($model) {
            $goodsCount = count($model->goods);
            $resultValue = "";
            for($i=1; $i <= $goodsCount; $i++)
            {
                $resultValue .= "{$i}) {$model->goods[$i-1]->name} ({$model->orderGoods[$i-1]->amount})\n";
            }
    
            return $resultValue;
        },
    ],