2016-04-15 18 views
0

Sie müssen ein Feld aus 2 Tabellen mit der Methode joinWith() auswählen. Ich habe 2 Tische: Wohnungen und Stadt.joinWith return null Fremdschlüsselwert

Apartments Tabelle hat cityId Feld und Stadt Tabelle hat zwei Felder: id und Wert.

Etwas wie folgt aus:

enter image description here

Ich möchte einige Felder aus Wohnungen Tabelle auszuwählen und über CityID Feldnamen (Wert) von Stadt bekommen.

Relations in Wohnungen Modell:

public function getCity() { 
    return $this->hasOne(City::className(), ['id' => 'cityId']); 
} 

Relations in Stadt Modell:

public function getApartments() { 
    return $this->hasMany(Apartments::className(), ['cityId' => 'id']); 
} 

In Controller I Abfrage mit joinWith() Methode bauen, aber es nicht zurück city.value Feld. diese

$apartments = Apartments::find()->select('apartments.title, city.value')->joinWith('city')->all(); 

print_r($apartments) kehrt:

Array ([0] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 1) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 1) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ()) [1] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 2) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 2) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ()) [2] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 3) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 3) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ()) [3] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 4) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 4) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ()) [4] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 5) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 5) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ()) [5] => app\models\Apartments Object ([file] => [_attributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 6) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ([title] => Квартира 6) [_related:yii\db\BaseActiveRecord:private] => Array ([city] =>) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array () [_behaviors:yii\base\Component:private] => Array ())) 

Ich sehe nicht city.value Feld in dieser Antwort, aber Stadt Feld ohne Wert sehen.

Können Sie mir helfen? Was ist das Problem?

Antwort

1

Da Sie die Beziehungen im Modell yii automatisch erzeugt die verbundenen Werte. Versuchen Sie diesen Code

$apartments = Apartments::find()->all(); 
foreach($apartments as $apartment) 
{ 
    echo $apartment->city->value; 
} 

sorry, wenn dies ist nicht das, was Sie gemeint!

+0

Oh, vielen Dank. – rmpstmp

+0

glücklich zu helfen :) – Midhun

2

Try this:

$query = new Query; 
$query->select(['apartments.title as app_title', 'city.value as city_val']) 
       ->from('apartments') 
       ->join('INNER JOIN', 
        'city', 
        'city.id =apartments.cityId' 
       ); 

    $command = $query->createCommand(); 
    $data = $command->queryAll(); 
+0

Diese Antwort richtig, aber die Antwort im Array-Format. Trotzdem danke. – rmpstmp

0

In joinWith, die Sie verpasst join 'auf den Feldern, apartments.cityId und city.id

$apartments = Apartments::find()->select('apartments.title, city.value, partments.cityId, city.id')->joinWith('city')->all(); 
Verwandte Themen