Php Yii:如何参考型号';列名重复执行关系查询时的字段?

Php Yii:如何参考型号';列名重复执行关系查询时的字段?,php,yii,Php,Yii,我尝试在Yii中执行此关系查询: $r = MachineData::model()->with('machineGames')->findByPk($machine_id); 但它返回以下错误: CDbCommand failed to execute the SQL statement: SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "machine_id" is ambiguous L

我尝试在Yii中执行此关系查询:

$r = MachineData::model()->with('machineGames')->findByPk($machine_id);
但它返回以下错误:

CDbCommand failed to execute the SQL statement: SQLSTATE[42702]: Ambiguous column: 7         ERROR: column reference "machine_id" is ambiguous
LINE 1: ..."."game_id") WHERE ("t"."machine_id"=3) ORDER BY machine_id...
问题似乎出现在
ORDER BY
子句中,其中对
机器id
的引用不清楚。它可能引用这两个表,因为它们都有
machine\u id
列。你能给我建议一些解决办法吗? 问候

附言。 使用以下CDBC标准会产生相同的错误:

$criteria=new CDbCriteria();
$criteria->alias = "u";
$criteria->compare('u.machine_id',$machine_id);
$criteria->with = array('machineGames');
$r = MachineData::model()->findAll($criteria);
这是model
MachineData
中的关系:

abstract class BaseMachineData extends GxActiveRecord {
  public function relations() {
    return array('machineGames' => array(self::HAS_MANY, 'MachineGames', 'machine_id', 'order'=>'machine_id', 'with'=>'game');
    }
  //code goes here
}

class MachineData extends BaseMachineData{
   //code goes here
}
这是模型机器名称中的关系:

abstract class BaseMachineGames extends GxActiveRecord {
  public function relations() {
    return array('machine' => array(self::BELONGS_TO, 'MachineData', 'machine_id');
  }
  //code goes here
}

class MachineGames extends BaseMachineGames
{
  //code goes here
}

我认为问题在于MachineData::relations()方法:

您应该在此处消除*machine_id*的歧义,如文档中所述:


NB:上面的代码使用了关系的名称,因此出现了*machine\u games.machine\u id*列。如果要消除主表列(此处:*machine\u data.machine\u id*)上的歧义,请使用别名“t”

我认为问题在于您的MachineData::relations()方法:

您应该在此处消除*machine_id*的歧义,如文档中所述:


NB:上面的代码使用了关系的名称,因此出现了*machine\u games.machine\u id*列。如果要消除主表列(此处:*machine\u data.machine\u id*)上的歧义,请使用别名“t”

请添加您的
CDbCriteria
定义。一般来说,在这种情况下,您可以为一个表设置别名,如下所示:这两个表都不适用于条件。您能展示一下您在两个模型中声明的关系吗?是的,我认为问题来自于关系,Herode的答案对我来说似乎很好!请添加您的
CDbCriteria
定义。一般来说,在这种情况下,您可以为一个表设置别名,如下所示:这两个表都不适用于条件。您能展示一下您在两个模型中声明的关系吗?是的,我认为问题来自于关系,Herode的答案对我来说似乎很好!我删除了
order
规则,错误消息没有显示。这样没关系,我就这样离开。请注意,问题似乎与@Herode所描述的一样,但在他的建议中,Yii仍然抱怨
machineGames.machine\u id
中的
machineGames
。但只要我从代码中排除了
order
子句,我就不在乎了。谢谢你,赫罗德。我爱你:)@0xC0DEGURU不客气。无论如何,只要我有几分钟的时间,我就会尝试找出建议代码中的错误并进行更新。最好发布无缺陷的解决方案;o) 我删除了
order
规则,错误消息没有显示。这样没关系,我就这样离开。请注意,问题似乎与@Herode所描述的一样,但在他的建议中,Yii仍然抱怨
machineGames.machine\u id
中的
machineGames
。但只要我从代码中排除了
order
子句,我就不在乎了。谢谢你,赫罗德。我爱你:)@0xC0DEGURU不客气。无论如何,只要我有几分钟的时间,我就会尝试找出建议代码中的错误并进行更新。最好发布无缺陷的解决方案;o)
public function relations() {
    return array('machineGames' => array(self::HAS_MANY, 'MachineGames', 'machine_id', 'order'=>'machine_id', 'with'=>'game');
    }
public function relations() {
    return array('machineGames' => array(self::HAS_MANY, 'MachineGames', 'machine_id', 'order'=>'machineGames.machine_id', 'with'=>'game');
    }