在Laravel中有许多2个变形模型

时间:2015-08-28 12:48:11

标签: laravel orm laravel-5 eloquent

我有3-4种不同的型号:

  • 汽车
  • 办公室

所以3:

之间有很多关系
People <-> Cars
Cars <-> Offices
People <-> Offices

有没有办法可以用双变换定义单个数据透视表,有这样的MySQL表

- id
- target_id
- target_type
- source_id
- source_type

通过这种方式,我可以在图片中添加任何新模型。

1 个答案:

答案 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');
    }