如何在多对多关系中获取其他字段?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
- 姓名(金额)
- 姓名(金额)
- 姓名(金额)
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,relationhasMany()
:
在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;
},
],