Skip to content

Commit e13d3c1

Browse files
committed
关联模型支持多级关联,在某个关联设置中配置
'relation_deep'=>true 或者仅仅多级关联某个 'relation_deep'=>'comment'
1 parent 41a3e2a commit e13d3c1

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

Extend/Model/RelationModel.class.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ protected function getRelation(&$result,$name='',$return=false) {
150150
$pk = $result[$mappingKey];
151151
$mappingCondition .= " AND {$mappingFk}='{$pk}'";
152152
$relationData = $model->where($mappingCondition)->field($mappingFields)->find();
153+
if (!empty($val['relation_deep'])){
154+
$model->getRelation($relationData,$val['relation_deep']);
155+
}
153156
break;
154157
case BELONGS_TO:
155158
if(strtoupper($mappingClass)==strtoupper($this->name)) {
@@ -161,6 +164,9 @@ protected function getRelation(&$result,$name='',$return=false) {
161164
$fk = $result[$mappingFk];
162165
$mappingCondition .= " AND {$model->getPk()}='{$fk}'";
163166
$relationData = $model->where($mappingCondition)->field($mappingFields)->find();
167+
if (!empty($val['relation_deep'])){
168+
$model->getRelation($relationData,$val['relation_deep']);
169+
}
164170
break;
165171
case HAS_MANY:
166172
$pk = $result[$mappingKey];
@@ -169,6 +175,12 @@ protected function getRelation(&$result,$name='',$return=false) {
169175
$mappingLimit = !empty($val['mapping_limit'])?$val['mapping_limit']:'';
170176
// 延时获取关联记录
171177
$relationData = $model->where($mappingCondition)->field($mappingFields)->order($mappingOrder)->limit($mappingLimit)->select();
178+
if (!empty($val['relation_deep'])){
179+
foreach($relationData as $key=>$data){
180+
$model->getRelation($data,$val['relation_deep']);
181+
$relationData[$key] = $data;
182+
}
183+
}
172184
break;
173185
case MANY_TO_MANY:
174186
$pk = $result[$mappingKey];
@@ -188,6 +200,12 @@ protected function getRelation(&$result,$name='',$return=false) {
188200
$sql .= ' LIMIT '.$mappingLimit;
189201
}
190202
$relationData = $this->query($sql);
203+
if (!empty($val['relation_deep'])){
204+
foreach($relationData as $key=>$data){
205+
$model->getRelation($data,$val['relation_deep']);
206+
$relationData[$key] = $data;
207+
}
208+
}
191209
break;
192210
}
193211
if(!$return){
@@ -339,6 +357,9 @@ protected function opRelation($opType,$data='',$name='') {
339357
}
340358
break;
341359
}
360+
if (!empty($val['relation_deep'])){
361+
$model->opRelation($opType,$mappingData,$val['relation_deep']);
362+
}
342363
}
343364
}
344365
}

0 commit comments

Comments
 (0)