首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SubQuery in ActiveRecord

SubQuery in ActiveRecord
EN

Stack Overflow用户
提问于 2017-09-20 15:29:21
回答 1查看 47关注 0票数 0

我在yii2中有以下模型:

代码语言:javascript
复制
use frontend\modules\bewerber\models\Bewerber;
use common\modules\basis\models\base\Person;
use common\modules\lookup\models\LAnrede;

如何使用ActiveRecord的方法创建以下查询?

代码语言:javascript
复制
SELECT anrede FROM L_anrede JOIN Person ON L_anrede.id=Person.id_anrede WHERE Person.id IN
(SELECT id_person FROM Bewerber WHERE Bewerber.id_person=1);

P.S.:最后一个WHERE子句不应该是固定的,而应该是这样的变量:

代码语言:javascript
复制
var_dump(LAnrede::findOne([$model->id_person])->anrede)

结果如下:先生、先生或小姐

................................................................

法布里齐奥·卡尔达雷利提示

................................................................

您的解决方案无助于me:=(

这是您的代码:

代码语言:javascript
复制
$idPerson = 1;

$show=LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
       $q->andWhere([
             'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
       ])->anrede;
}]);

这是var_dump($show);

代码语言:javascript
复制
E:\xampp\htdocs\yii2_perswitch\frontend\modules\bewerber\views\bewerber\index.php:48:
object(common\modules\lookup\models\LAnredeQuery)[207]
  public 'sql' => null
  public 'on' => null
  public 'joinWith' => 
    array (size=1)
      0 => 
        array (size=3)
          0 => 
            array (size=1)
              ...
          1 => boolean true
          2 => string 'LEFT JOIN' (length=9)
  public 'select' => null
  public 'selectOption' => null
  public 'distinct' => null
  public 'from' => null
  public 'groupBy' => null
  public 'join' => null
  public 'having' => null
  public 'union' => null
  public 'params' => 
    array (size=0)
      empty
  private '_events' (yii\base\Component) => 
    array (size=0)
      empty
  private '_behaviors' (yii\base\Component) => 
    array (size=0)
      empty
  public 'where' => null
  public 'limit' => null
  public 'offset' => null
  public 'orderBy' => null
  public 'indexBy' => null
  public 'emulateExecution' => boolean false
  public 'modelClass' => string 'common\modules\lookup\models\LAnrede' (length=36)
  public 'with' => null
  public 'asArray' => null
  public 'multiple' => null
  public 'primaryModel' => null
  public 'link' => null
  public 'via' => null
  public 'inverseOf' => null

我像这样使用Gridview

代码语言:javascript
复制
$gridColumn = [
    [
        'attribute' => '',
        'label' => Yii::t('app', 'Anrede'),
        'format' => 'html',
        'value' => function($model) {
            return "<p><font color='green'>" . LAnrede::findOne([$model->id_person])->anrede . "</p>";
        }
    ],
    ];

请告诉我如何在这种情况下使用您的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-20 15:49:44

这应该是可行的:

代码语言:javascript
复制
$idPerson = 1;

LAnrede::find()->joinWith(['Person' => function($q) use($idPerson) {
       $q->andWhere([
             'Person.id' => (new \yii\db\Query())->from('Bewerber')->where(['Bewerber.id_person' => $idPerson])
       ]);
}])
->all();

‘'Person’是LAnrede模型中的一个关系(一个还是多个关系?)

代码语言:javascript
复制
public function getPerson()
{
    return $this->hasMany(Person::className(), ['id_anrede' => 'id']);
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46326159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档