Yii2 QueryBuilder联合体不工作
这是我的密码。我想将结果从两列中选择为一列。谢谢Yii2 QueryBuilder联合体不工作,yii2,union,Yii2,Union,这是我的密码。我想将结果从两列中选择为一列。谢谢 $messages = (new \yii\db\Query()) ->select(['idsender as idotherguy']) ->from('messages') ->where(['idreceiver' => Yii::$app->user->identity->id])
$messages = (new \yii\db\Query())
->select(['idsender as idotherguy'])
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id])
->all();
$messages2 = (new \yii\db\Query())
->select(['idreceiver as idotherguy'])
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id])
->all();
$messages->union($messages2);
经过这里的建议,我也尝试了
$messages = (new \yii\db\Query())
->select(['idsender as idotherguy'])
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id]);
$messages2 = (new \yii\db\Query())
->select(['idreceiver '])
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id]);
$messages->union($messages2);
$messages->all();
我得到了查询对象
yii\db\Query Object
[选择]=>阵列
[0]=>idsender作为idotherguy
就是这样。。。我也尝试了answe bellow,并在选择“idreceiver as idotherguy”中使用。。。但是结果是一样的看看文档,您不应该在查询中包含所有内容
$messages = (new \yii\db\Query())
->select(['idsender as idotherguy'])
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id]);
$messages2 = (new \yii\db\Query())
->select(['idreceiver as idotherguy'])
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id]);
$messages->union($messages2);
$messages->all();
在联合查询中应避免使用别名,使用文本选择格式并仅对结果应用all
$messages = (new \yii\db\Query())
->select('idsender as idotherguy')
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id]);
$messages2 = (new \yii\db\Query())
->select('idreceiver')
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id]);
$messages->union($messages2);
$messages->all();
要查看结果,您应该
foreach($messages as $key=> $value) {
echo $value->idotherguy;
}
或者如果结果是一个数组
foreach($messages as $key=> $value) {
echo $value['idotherguy'];
}
尝试以这种方式检查ral sql代码,而不是$messages->all
var_dump( $messages->createCommand()->sql);
我更改了这里提供的代码,现在可以正常工作了
$messages = (new \yii\db\Query())
->select(['idsender as idotherguy'])
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id]);
$messages2 = (new \yii\db\Query())
->select(['idreceiver as idotherguy'])
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id]);
$messages = $messages->union($messages2)
->all();
现在的结果是数组中包含我想要的值。
大堆
[0]=>阵列
[idotherguy]=>3
谢谢大家的帮助,男孩们:我仍然没有得到包含结果的数组,但是yii\db\Query object你是什么意思。。你有错误吗。。错误的结果?更新您的问题,并在获得查询结果时显示代码。请尝试使用它。。请II\db\Query Object[select]=>Array[0]=>idsender作为idotherguy[selectOption]=>[distinct]=>[from]=>Array[0]=>messages[groupBy]=>[join]=>[having]=>[union]=>Array[0]=>数组[查询]=>yii\db\query对象。。。。。。。还有,不要在评论中发布代码。。。更新您的问题添加代码和格式我做了,请检查这一点,因为上面的解决方案为我提供了yii\db\Query对象,也没有带结果的数组单独的查询工作得很好
$messages = (new \yii\db\Query())
->select(['idsender as idotherguy'])
->from('messages')
->where(['idreceiver' => Yii::$app->user->identity->id]);
$messages2 = (new \yii\db\Query())
->select(['idreceiver as idotherguy'])
->from('messages')
->where(['idsender' => Yii::$app->user->identity->id]);
$messages = $messages->union($messages2)
->all();
[1] => Array
(
[idotherguy] => 11
)
[2] => Array
(
[idotherguy] => 10
)