2017-02-27 9 views
1

は私がテーブルuserprofile、 1人のユーザーは、最大つのプロファイルを持って とUSER_IDとプロファイルのテーブル名によって指定されています。 私はそこに外部キーを使用しません。モデル関係キーの値を指定する方法は?

私もテーブルprofileを使用していますcompanyのような他のテーブルを持っているので、参照が関連テーブルと関係のrelation_id =主キー=テーブル名で指定されているので、理由、私は、このようにそれを行うには、ある

profile 
    relation_id 
    relation 

私が達成したいのは、モデルの関係を文字列ユーザーと等しくなるように設定することです。そこで、キーを使用するのではなく、代わりに値を使用することです。

User.php

public function getProfile() 
{ 
    return $this->hasOne(Profile::className(), 
     ['relation_id' => 'user_id', 'relation' => User::tableName()]); 
} 

エラー私が取得:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user.user' in 'on clause' 
The SQL being executed was: 

SELECT COUNT(*) FROM `user_login` 
LEFT JOIN `user` ON `user_login`.`user_id` = `user`.`user_id` 
LEFT JOIN `profile` ON `user`.`user_id` = `profile`.`relation_id` 
    AND `user`.`user` = `profile`.`relation` 

SQLが最初のカウントに失敗したので、それは、GridViewコントロールを生成するためのものであるが、エラーがselect *

のために同じになります

SQL達成したい

SELECT * FROM `user_login` 
LEFT JOIN `user` ON `user_login`.`user_id` = `user`.`user_id` 
LEFT JOIN `profile` ON `user`.`user_id` = `profile`.`relation_id` 
    AND `profile`.`relation` = 'user' 

したがって、モデル関連キーで値を指定する方法は?

答えて

2

あなたのユーザープロファイルを使って、関係のhasOneを持っている場合にのみ

public function getProfile() 
{ 
    return $this->hasOne(Profile::className(), 
    ['relation_id' => 'user_id']); 
} 

を使用する必要がありますし、あなたが条件で使用

public function getProfile() 
    { 
    return $this->hasOne(Profile::className(), 
     ['relation_id' => 'user_id'])->andOnCondition(['relation' => User::tableName()]); 

    } 
+0

を必要とするが、場合、私のような他のテーブル用のテーブル 'profile'を使用して'会社など – Ripper

+0

あなたはプロファイルモデル – scaisEdge

+0

の他の関係を必要とする私は達成したい、今すぐ確認してください – Ripper

関連する問題