2016-04-15 5 views
0

Необходимо выбрать какое-либо поле из 2 таблиц, используя метод joinWith(). У меня есть 2 стола: квартиры и город.joinWith return null значение внешнего ключа

Apartments таблица имеет поле CityId и город таблица имеет 2 поля: идентификатор и значение.

Что-то вроде этого:

enter image description here

Я хочу, чтобы выбрать несколько полей из квартир стола и через CityId поля получить имя (значения) из города.

отношения в квартире модели:

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

Отношение в городе модели:

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

В контроллере я построить запрос с использованием joinWith() метода, но он не возвращающие city.value раздел.

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

print_r($apartments) возвращает это:

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 ())) 

Я не вижу city.value поле в этом ответе, но посмотреть город поле без какого-либо значения.

Вы можете мне помочь? Что проблема?

ответ

1

Поскольку у вас есть отношения в модели Yii автоматически генерируется объединенные значения. Попробуйте этот код

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

жаль, если это не то, что вы имели в виду!

+0

О, большое спасибо. – rmpstmp

+0

рад помочь :) – Midhun

2

Попробуйте это:

$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

Ответ правильный, но ответ в формате массива. В любом случае, благодарю Вас. – rmpstmp

0

В joinWith, вы пропустили присоединиться к 'на' полях, apartments.cityId и city.id

$apartments = Apartments::find()->select('apartments.title, city.value, partments.cityId, city.id')->joinWith('city')->all(); 
Смежные вопросы