Yii2 如何将联合作为活动记录对象返回?

Yii2 如何将联合作为活动记录对象返回?,yii2,Yii2,我的控制器中有以下接头: $expression = new Expression('"News"'); $featuredNews2= news::find() ->alias('ne') ->select(['ne.title', 'ne.content','ne.featuredOrder', 'category'=>$expression]) ->innerJoinWith('featuredOrder1'); $expression2 =

我的控制器中有以下接头:

$expression = new Expression('"News"');

$featuredNews2= news::find()
   ->alias('ne')
   ->select(['ne.title', 'ne.content','ne.featuredOrder',  'category'=>$expression])
   ->innerJoinWith('featuredOrder1');

$expression2 = new Expression('"Event"');

$featuredEvents2 = event::find()
    ->select(['ev.title', 'ev.content','ev.featuredOrder','category'=>$expression2])
    ->from('event ev')
    ->innerJoinWith('featuredOrder2');

$union =  $featuredNews2->union($featuredEvents2);
模型中的关系: 新闻模型

    public function getFeaturedOrder1()
    {
        return $this->hasOne(Featured::className(), ['featuredOrder' => 'featuredOrder']);
    }
事件模型

public function getFeaturedOrder2()
    {
        return $this->hasOne(Featured::className(), ['featuredOrder' => 'featuredOrder']);
    }
我需要将查询作为活动查询返回,因为我需要访问模型的方法,例如:我的视图中的
$model->featuredOrder1->preview
。 以下操作可行,但它返回一个数组,因此我无法访问模型的方法:

 $unionQuery =  (new \yii\db\Query)->select('*')
    ->from($union)
    ->orderBy('featuredOrder')->all(\Yii::$app->db2);
我有两个问题:

  • 如何将上面等效的$unionQuery作为活动查询对象返回?我已经在谷歌上搜索过了,但我发现的是如何将其作为数组返回

  • 这是出于好奇,我想知道为什么我应该在上面的$unionQuery
    all()
    方法中提供db连接作为参数。如果我没有使用指向
    db2
    的参数,它将在
    db
    数据库中查找表名(db是我的父数据库,这个db2是我模块的数据库/正确的数据库)。这只会发生在
    联合体上
    。我的新闻和事件模型在getdb()函数中已经具有以下内容:

  • 更新 我也试过:

    $unionProvider =  (new ActiveQuery(Featured::className()))->select('*')
        ->from(['union' => $featuredEvents2->union($featuredNews2)])
        ->orderBy('featuredOrder');
    
    特色
    车型中使用此关系:

     public function getNews()
        {
    return $this->hasOne(News::className(), ['featuredOrder' => 'featuredOrder']);
        }
    
    public function getEvents()
        {
            return $this->hasOne(Event::className(), ['featuredOrder' => 'featuredOrder']);
        }
    
    在视图中,我尝试了以下方法:

    foreach($unionProvider as $key=>$model){
    echo $model->news->title;
    }
    
    但出现以下错误:
    尝试获取非对象的属性

    更新2 我忘了在我的
    $unionProvider
    中添加
    ->all()
    ,但是在那之后我得到了这个错误:
    PHP致命错误–yii\base\ErrorException
    已用尽134217728字节的允许内存大小(尝试分配12288字节)


    我的查询可能有问题吗?无法理解

    您可以尝试使用纯SQL。另外,您可以测试它是否返回正确的结果,然后将其添加到下面的语句中

    $customers=Customer::findBySql('SELECT*fromcustomer')->all();
    

    foreach($unionProvider as $key=>$model){
    echo $model->news->title;
    }