Yii2与同一个表有很多关系

时间:2017-10-28 16:07:00

标签: yii2 relation

以下是该方案:

我有两张桌子:

create or replace view schema_name.v_table_name
as
select
  cast(number_col1_name as number(20, 6)) as number_col1_name,   /* problematic column */
  col2,
  col3,
  ...
from table_name;

外键是人(familyId - > family.id)

在我的Person模型中,我希望拥有一个关系,该关系可以包含与当前人具有相同familyId的所有人员条目。

基本上我想做val query = """ ( select cast(number_col1_name as number(20, 6)) as number_col1_name, col2, col3, ... from table_name ) as v_table_name """ val df_oracle = spark.read .format("jdbc") .option("url", "jdbc:oracle:thin:@hostname:port:SID") .option("user",userName) .option("password",passWord) .option("driver", "oracle.jdbc.driver.OracleDriver") .option("dbtable", query) .load() 来获取当前的Person模型,包括一系列家庭成员。

到目前为止,我在PersonModel上有这个:

family: id, name
person: id, name, familyId

...

$person = Person::find([...])->with('family')->all()

我知道我可以用连接表做到这一点。但由于这是一个1:n的关系,我想避免额外的表。

感谢。

1 个答案:

答案 0 :(得分:0)

快速决策类似于您个人模型中的此查询:

public function getRelatedPersons()
{
   return self::find()->jeftJoin(Family::tableName(), 'person.familyId =  
   family.id')->where(['person.familyId' => $this->familyId])->all();
}
...
foreach($personModel->relatedPersons as $person)  {
   var_dunp($preson);
}