2017-11-08 6 views
0

私はYiiにとっては新しく、いくつかのことを頭に浮かべるのに苦労しています。Yii2 ActiveRecord

私はこの機能を備えたモデルがあります:

public static function findNonGeo() 
{ 

    $query = new CallerIdentityQuery(get_called_class()); 
    $query->select([ 
     'cidref', 'caller_id', 'expiry', 'conf_call', 
     'type', 'redirect', 'destination', 'status', 'start_date', 
     'statusDesc' => new \yii\db\Expression("CASE status 
      WHEN 0 THEN 'Deactivated' 
      WHEN 1 THEN 'Active' 
      WHEN 2 THEN 'Inactive' 
      WHEN 3 THEN 'Unregistered' 
      ELSE 'Permanently Deleted' END")]) 
     ->where(['status' => '1']) 
     ->andWhere(['type' => 'N']) 
     ->andWhere(['custref' => Yii::$app->user->identity->typedIdentity->getId()]); 
    return $query; 
} 

をそして、私のコントローラで、私はそうのように、このメソッドを呼び出します。

$model = CallerIdentity::findNonGeo()->where(['cidref' => $id])->one(); 

が、データがそのそのだけで

を無視してのように返されます
->andWhere(['type' => 'N']) 

「N」タイプではないレコードを表示できるためです。 は、私は多分、私が何か間違ったことをやっているか、それを理解していない、私のコントローラで行うことを抱えているが、私はそれを得ることはありません:

$model = CallerIdentity::findNonGeo()->where(['cidref' => $id])->andWhere(['type'=>'N'])->one(); 

別の事findOne($ ID)を使用した場合:

$model = CallerIdentity::findOne($id); 

nullが返されます。

任意の形式の説明/情報がありがとう。

答えて

1

whereを使用している場合は、クエリのwhere部分を追加しないで設定します。したがって、findNonGeo関数では、必要なwhere部分を構築しています。しかし、CallerIdentity::findNonGeo()->where(['cidref' => $id])を使用すると、すでに追加されている部分が削除されます。

は次のように試してみてください:

CallerIdentity::findNonGeo()->andWhere(['cidref' => $id])->one(); 

andWhereを使用することによって、あなたが他の部分を維持し、それに別のものを追加します。

関連する問題