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);
我有两个问题:
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;
}