帮帮我吧
我有 table :
goods 与字段:
id int(11)name varchar(255)
orders 与字段:
id int(11)status_id int(2)
orders_goods 与字段:
id int(11)order_id int(11)good_id int(11)amount int(5)
我想通过good_id收到订单的所有商品,并从同一行收到额外的字段数量 . 之后,在View中,我想以这种格式显示所有订单商品:
good.name(金额)good.name(金额)good.name(金额)
现在在 Orders 模型中,我有一种接收订单货物的方法:
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]);
}
);
}
在GridView中,我显示了很好的名字:
[
'label' => 'Goods',
'value' => function ($model) {
return implode("\n", ArrayHelper::map($model->goods, 'id', 'name'));
},
],
如何将金额字段中的货物数量添加到GridView中的显示?这可以在没有额外中间模型的情况下完成吗?
"<pre>" . print_r($model->goods, true) . "</pre>"
结果:
<pre>
Array (
[0] => app\models\Goods Object (
[_attributes:yii\db\BaseActiveRecord:private] => Array (
[id] => 1
[name] => Monkey gold
)
[_oldAttributes:yii\db\BaseActiveRecord:private] => Array (
[id] => 1
[name] => Monkey gold
)
[_related:yii\db\BaseActiveRecord:private] => Array ( )
[_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( )
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array ( )
[_eventWildcards:yii\base\Component:private] => Array ( )
[_behaviors:yii\base\Component:private] => Array ( )
)
[1] => app\models\Goods Object (
[_attributes:yii\db\BaseActiveRecord:private] => Array (
[id] => 2
[name] => Monkey green
)
[_oldAttributes:yii\db\BaseActiveRecord:private] => Array (
[id] => 2
[name] => Monkey green
)
[_related:yii\db\BaseActiveRecord:private] => Array ( )
[_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( )
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array ( )
[_eventWildcards:yii\base\Component:private] => Array ( )
[_behaviors:yii\base\Component:private] => Array ( )
)
)
</pre>
1 回答
我问是否可以在不添加中间模型的情况下执行此操作 . 显然这不可能做到 . 结果,我这样做:
我在订单模型中添加了模型OrdersGoods,关系
hasMany()
:在GridView中:
写得不是很好,但它确实有效 . 谢谢!