如何从MySQL中的表获取Mongodb集合数据

omjgkv6w  于 2023-03-01  发布在  Go
关注(0)|答案(1)|浏览(144)

在Yii 2中,我尝试从MySQL表中的一个表(DB activerecord)中获取另一个字段数据(在Mongo集合中)。
我的summary表/模型如下所示。

'merchant_id'       => '123'
'report_date'       => '2023-02-22'
'total_transaction' => 91
'total_amount'      => 998471

我在Mongo中的merchant集合如下所示(merchant_id作为“外键”)

merchant_id => '123',
name        => 'Merchant A',
branch_code => '123',
type        => 'Type A'

我需要显示带有GridView、所有筛选器和排序等的完整数据。例如,如果设置了“merchant_type”筛选器,则GridView应仅显示相关行。
我包括我在答案上尝试过的。它可能有更好的方法。

5lhxktic

5lhxktic1#

我不确定它是否理想,但DB方案已经很奇怪了。
我在Summary模型中创建了一个“getMerchant()”

public function getMerchant()
{
    $merchant = Merchant::find()->where(['merchant_id' => $this->merchant_id])->one();
    
    return $merchant;
}

...并根据过滤器从商户集合中获取所有商户ID

public function getMerchantIDs($where = []) 
{
    $merchant_ids = Merchant::find()->
        select('merchant_id')->
        where($where)->
        column();
    
    return $merchant_ids;
}

对于搜索模型,

public $merchant_type;
public $merchant_branch_code;

public function search($params) {
    .......
    .......
    $condition = [];
    if (isset($this->merchant_type)) {
        $condition['merchant_type'] = $this->merchant_type;
    }

    if (isset($this->merchant_branch_code)) {
        $condition['branch_code'] = $this->merchant_branch_code;
    }

    $merchant_ids = $this->getMerchantIDs($condition);
    $query->andFilterWhere(['in', 'merchant_id', $merchant_ids]);

在GridView上,类似于以下内容:

[
    'attribute' => 'merchant_branch_code',
    'label' => 'Branch Code',
    'value' => function($model){
        return $model->merchant->branch_code;
    },
],

相关问题