2017-08-20 8 views
1

私はvar_damp($部屋)を使用する場合、このコードは、データベース からオブジェクトの代わりに、選択されたレコードの配列を返しますなぜ私が出力されているMySQLデータベース
で基本テンプレート内にyii2を使用して使用していそうですオブジェクトであり、配列形式で選択されたレコードの配列ではありません。 すべてのボディはのYiiのActiveRecordの戻りオブジェクト

public function actionIndexFiltered() 
    { 
     $query = Room::find(); 

     $searchFilter = [ 
      'floor' => ['operator' => '', 'value' => ''], 
      'room_number' => ['operator' => '', 'value' => ''], 
      'price_per_day' => ['operator' => '', 'value' => ''], 
     ]; 

     if(isset($_POST['SearchFilter'])) 
     { 
      $fieldsList = ['floor', 'room_number', 'price_per_day']; 

      foreach($fieldsList as $field) 
      { 
       $fieldOperator = $_POST['SearchFilter'][$field]['operator']; 
       $fieldValue = $_POST['SearchFilter'][$field]['value']; 

       $searchFilter[$field] = ['operator' => $fieldOperator, 'value' => $fieldValue]; 

       if($fieldValue != '') 
       { 
        $temp1=$query->andWhere([$fieldOperator, $field, $fieldValue]); 
       } 
      } 
     } 
     $room1=$temp1->all(); 
     $rooms = $query; 

     return $this->render('indexFiltered', [ 'rooms' => $rooms, 'searchFilter' => $searchFilter,'room1'=>$room1 ]); 



    } 

出力は次のようであり、これは、このコードは、私はのvar_dump関数を使用してコードをチェックした結果がこれということです 、データベースにクエリオブジェクトではなく、クエリの実行の配列を返すことを示して助けることができますあなたのコード$temp1でオブジェクトを返さない配列

object(yii\db\ActiveQuery)[70] 
     public 'sql' => null 
     public 'on' => null 
     public 'joinWith' => null 
     public 'select' => null 
     public 'selectOption' => null 
     public 'distinct' => null 
     public 'from' => 
     array (size=1) 
      0 => string 'room' (length=4) 
     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' => 
     array (size=3) 
      0 => string '=' (length=1) 
      1 => string 'room_number' (length=11) 
      2 => string '3' (length=1) 
     public 'limit' => null 
     public 'offset' => null 
     public 'orderBy' => null 
     public 'indexBy' => null 
     public 'emulateExecution' => boolean false 
     public 'modelClass' => string 'app\models\Room' (length=15) 
     public 'with' => null 
     public 'asArray' => null 
     public 'multiple' => null 
     public 'primaryModel' => null 
     public 'link' => null 
     public 'via' => null 
     public 'inverseOf' => null 

答えて

1

このコードは、結果が取得モデル/アクティブなレコード

$query = Room::find(); 

ためのコードに別名..のdataProviderを返すために使用できるすべてのモデル、この中

$roomModels= Room::find()->all(); 

を取得しますオブジェのコレクションルーム(モデル)

あなたが使用できる配列が必要な場合

$roomArray = Room::find()->asArray()->all(); 
0

$queryと同じです。 andWhere()方法は

$temp1 = $query->andWhere([$fieldOperator, $field, $fieldValue]); 

$temp1yii\db\ActiveQueryの目的である$queryと同じになることを意味する$thisを返します。

今、あなたはこれを呼び出している:$roomsが対象である$queryと同じであるため、

$rooms = $query; 

はちょうど別の不要割り当てている間

$room1 = $temp1->all(); // the same as $room1 = $query->all(); 

このRoomオブジェクトの配列を保持していますyii\db\ActiveQuery

0

は、最後に私はこの問題の理由は、私が$room1=$temp1->asArray()->all();

$room1=$temp1->all();が変更されますアレー出力を生成するためのActiveRecordクラスのasArray()メンバ関数を呼び出す必要があり ということです発見しました
関連する問題