Php joinWith返回空外键值

Php joinWith返回空外键值,php,mysql,yii2,Php,Mysql,Yii2,需要使用joinWith()方法从两个表中选择一些字段。我有两张桌子:公寓和城市 公寓表有cityId字段,城市表有两个字段:id和value 大概是这样的: 我想从公寓表中选择一些字段,并通过cityId字段获取城市的名称(value) 公寓中的关系模型: public function getCity() { return $this->hasOne(City::className(), ['id' => 'cityId']); } public function g

需要使用
joinWith()
方法从两个表中选择一些字段。我有两张桌子:公寓和城市

公寓表有cityId字段,城市表有两个字段:id和value

大概是这样的:

我想从公寓表中选择一些字段,并通过cityId字段获取城市的名称(value

公寓中的关系模型:

public function getCity() {
    return $this->hasOne(City::className(), ['id' => 'cityId']);
}
public function getApartments() {
    return $this->hasMany(Apartments::className(), ['cityId' => 'id']);
}
城市模型中的关系:

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($repartments)
返回以下内容:

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字段,但是看到city字段,没有任何值

你能帮我吗?有什么问题吗?

试试这个:

$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();
试试这个:

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

在joinWith中,您错过了join“on”字段、公寓.cityId和city.id

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

在joinWith中,您错过了join“on”字段、公寓.cityId和city.id

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

由于模型中存在关系,因此yii会自动生成关联值。 试试这个代码

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

对不起,如果这不是你的意思

由于您在模型中有关系,yii自动生成连接值。 试试这个代码

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

对不起,如果这不是你的意思

答案正确,但响应为数组格式。无论如何,谢谢。答案是正确的,但响应是数组格式的。无论如何,谢谢你。