我有3-4种不同的型号:
所以3:
之间有很多关系People <-> Cars
Cars <-> Offices
People <-> Offices
有没有办法可以用双变换定义单个数据透视表,有这样的MySQL表
- id
- target_id
- target_type
- source_id
- source_type
通过这种方式,我可以在图片中添加任何新模型。
答案 0 :(得分:1)
我不认为这种关系可以直接进行,但我有另一种选择。
您需要一个名为“people_car_office”的数据透视表:
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
if (myList.isItemChecked(position)) {
String name = this.listview_array2[position];
int counter2 = Integer.parseInt(name);
counter[0] = counter[0] + counter2;
tv1.setText("Total " + counter[0]);
人模特:
- id
- target_id
- target_type
- source_id
- source_type
和 Cars 模型:
public function cars(){
return $this->belongsToMany('Cars', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'People')->wherePivot('target_type','=','Cars');
}
public function offices(){
return $this->belongsToMany('Offices', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'People')->wherePivot('target_type','=','Offices');
}
和办事处模型:
public function people(){
return $this->belongsToMany('People', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'Cars')->wherePivot('target_type','=','People');
}
public function offices(){
return $this->belongsToMany('Offices', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'Cars')->wherePivot('target_type','=','Offices');
}
这就是多对多关系的工作方式。
-----------------------评论的回应-------------------- ---
当您希望将人与汽车连接时:
public function cars(){
return $this->belongsToMany('Cars', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'Offices')->wherePivot('target_type','=','Cars');
}
public function people(){
return $this->belongsToMany('People', 'people_car_office', 'target_id', 'source_id')->wherePivot('source_type', '=', 'Offices')->wherePivot('target_type','=','People');
}