Php 与非主键的Yii关系

Php 与非主键的Yii关系,php,yii,Php,Yii,我有一个mysql表和一个mysql视图,我正试图为它们建立关系 各委员的名单如下: --commissions-- id(primary Key) date_added order_id salesrep_id customer_id commission_total status --rep_view_customer-- entity_id email first_name last_name company viewrep_view_客户如下所示: --commissions-- i

我有一个mysql表和一个mysql视图,我正试图为它们建立关系

各委员的名单如下:

--commissions--
id(primary Key)
date_added
order_id
salesrep_id
customer_id
commission_total
status
--rep_view_customer--
entity_id
email
first_name
last_name
company
viewrep_view_客户如下所示:

--commissions--
id(primary Key)
date_added
order_id
salesrep_id
customer_id
commission_total
status
--rep_view_customer--
entity_id
email
first_name
last_name
company
我正在尝试将rep_view_customer与佣金相关。customer_id=rep_view_customer.entity_id

我已尝试使用on选项:

'rep_view_customer' => array(self::HAS_ONE, 'RepViewCustomer', '', 'on'=>'rep_view_customer.entity_id = t.customer_id')
我还尝试使用以下方法设置rep_view_客户模型的主键:

public function primaryKey(){
    return 'entity_id';
}
但我似乎总是以类似以下的错误结束:

CDbCommand无法执行SQL语句:SQLSTATE[42S22]: 未找到列:1054未知列“t.customer\u id”在“where”中 条款'。执行的SQL语句是:SELECT rep_view_customer.entity_id为t1_c0, rep_view_customer.email为t1_c1, 代表查看客户名为t1、c2、, 代表查看客户姓氏为t1\U c3, rep_view_customer.company作为t1_c4来自rep_view_customer rep_view_customer,其中rep_view_customer.entity_id= t、 客户识别码


我不知道下一步要做什么

您必须在repview\u客户内部创建一个外键,以与佣金相关。您将无法仅使用主键执行此操作。

您必须在repview\u客户内部创建一个外键,以与佣金相关。仅使用主键无法完成此操作。

我是这样做的,它可以工作: 因此,在您放置的佣金模型中:它通过模型中的自身来处理关系,那么连接输出将与正常关系相同,但在佣金模型中具有其他唯一键

public function relations()
    {
        return array(
            'commission' => array(self::HAS_ONE, 'Commission', 'entity_id', 'on' => 'commission.customer_id=rep_view_customer.entity_id'),
            'rep_view_customer' => array(self::HAS_MANY, 'RepViewCustomer', '', 'through' => 'commission', 'condition' => '...'),
        ),
    }      

我是这样做的,效果很好: 因此,在您放置的佣金模型中:它通过模型中的自身来处理关系,那么连接输出将与正常关系相同,但在佣金模型中具有其他唯一键

public function relations()
    {
        return array(
            'commission' => array(self::HAS_ONE, 'Commission', 'entity_id', 'on' => 'commission.customer_id=rep_view_customer.entity_id'),
            'rep_view_customer' => array(self::HAS_MANY, 'RepViewCustomer', '', 'through' => 'commission', 'condition' => '...'),
        ),
    }      

我试过了,但只会出错。我对错误进行了一些挖掘,确保两列的数据类型都正确,但从我发现的情况来看,mysql不允许在视图中使用外键。发布错误后,您的错误可能是因为数据的类型不同。数据的类型都是相同的INT10 UNSIGNED。我使用了以下mysql ALTER TABLE customer ADD CONSTRAINT customer\u id外键customer\u id rep\u view\u customerentity\u id,得到错误1005-无法创建表'salesrep\u 1.sql-da8\u 9c4'错误号:150。我尝试过,但只得到错误。我对错误进行了一些挖掘,确保两列的数据类型都正确,但从我发现的情况来看,mysql不允许在视图中使用外键。发布错误后,您的错误可能是因为数据的类型不同。数据的类型都是相同的INT10 UNSIGNED。我使用了以下mysql ALTER TABLE customer ADD CONSTRAINT customer\u id外键customer\u id rep\u view\u customerentity\u id,并获得错误1005-无法创建表'salesrep\u 1.sql-da8\u 9c4'errno:150。您能否详细说明“调用”rep\u view\u customer的控制器函数的代码?因为在CdbCommand调试器中似乎没有连接happening@ZaQ从CdbCommand调试器看,似乎没有连接发生,我对此也感到困惑。我使用的是由Gii创建的默认Admin CGridView,并添加了一列“rep_view_customer.first_name”。我只有在添加相关列时才会出现错误。请详细说明“调用”代表视图客户的控制器函数的代码好吗?因为在CdbCommand调试器中似乎没有连接happening@ZaQ从CdbCommand调试器看,似乎没有连接发生,我对此也感到困惑。我使用的是由Gii创建的默认Admin CGridView,并添加了一列“rep_view_customer.first_name”。我只有在添加相关列时才会出现错误。