以下是该方案:
我有两张桌子:
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的关系,我想避免额外的表。
感谢。
答案 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);
}