Все это для RESTful API, поэтому find()->joinWith
не поможет.
public function getGoodsInfo()
{
return $this->hasMany(Goods::class, ['id' => 'goods_id'])->via('goodsSpec')->with(['aftersales' => function($query){
$query->andOnCondition([Aftersale::tableName() . '.order_id' => $this->id]);
}]);
}
Приведенный выше код - это мой код на данный момент, он работает, но мой класс товаров должен определять «послепродажное обслуживание» как поля , точно так же, как
public function fields()
{
return ['id','merch_id', 'cate_id', 'aftersales'];
}
Проблема в том, что атрибут aftersales в большинстве случаев бесполезен в RESTful API, поэтому его следует помещать в extraFields. Но если я это сделаю, getGoodsInfo не вернется с атрибутом aftersales, даже если я использовал с функцией.
Я пробовал приведенный ниже код, но все еще не работает, функция выбора влияет только на столбцы, существующие в базе данных.
public function getGoodsInfo()
{
return $this->hasMany(Goods::class, ['id' => 'goods_id'])->select([Goods::tableName() . '*', 'aftersales'])->via('goodsSpec')->with(['aftersales' => function($query){
$query->andOnCondition([Aftersale::tableName() . '.order_id' => $this->id]);
}]);
}