2017-09-13 76 views
0

我有兩個型號 站 運營商Laravel分配一對多(?),多對多(?)

我目前正在爲若干運營「保存」到車站 但我想也是要能夠將相同的操作員「保存」到另一個站。

實施例:

+---------------------------------+ 
| Station | Operator(s) | 
|---------------------------------| 
| Munich  | Lufthansa  | 
|    | KLM    | 
|    | Air Malta  | 
|---------------------------------| 
| Berlin  | Lufthansa  | 
|    | KLM    | 
|---------------------------------| 
|------- etc ---------------| 
|---------------------------------| 

我的電臺表:

​​

我的電臺型號:

public function operators() { 
    return $this->hasMany(Operators::class); 
} 

我算表:

Schema::create('operators', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name', 100)->unique(); 
     $table->string('email', 100); 
     $table->boolean('notify')->default(false); 
     $table->timestamps(); 
    }); 

我的運營商型號:

public function stations() { 
    return $this->belongsTo(Stations::class); 
} 

在這裏,我必須說,我創造了站,並試圖加入運營商:

在StationsController:

收到了運營商的ID後,和車站名稱:

$station = new Stations; 
    $station->name = request('name'); 
    $station->save(); 
    foreach (request('operators') as $operator) { 
     $tempOperator = Operators::find($operator); 
     $station->operators()->associate($tempOperator)->save(); 
    } 

的迴應是:

"Call to undefined method Illuminate\Database\Query\Builder::associate()" 

我知道有一些錯誤的關係,但我不能看着辦吧......謝謝你在前進

+0

存在遷移的運營商表中沒有外鍵引用的例子。那麼關係將如何運作? – Naveen

+0

@Naveen你可能會精心製作嗎? – Jim

回答

0

你需要一箇中間StationsOperators表。

然後嘗試更新您的運營模式是這樣的:

public function stations() { 
    return $this->belongsToMany(Stations::class)->using(StationsOperators::class); 
} 

記住:

用來表示關係的中間表必須擴展照亮\數據庫\雄辯\關係\樞軸所有定製機型類。

這是一個多關係。你必須使用數據透視表。 @ref:https://laravel.com/docs/5.5/eloquent-relationships#many-to-many

+0

同樣的結果。但謝謝你的嘗試 – Jim

+0

我想念一些事情,現在嘗試 – aaron0207

+0

創建樞紐站運營商。還是一樣的結果。它應該是空的還是我需要添加一些東西? – Jim

1

回滾遷移PHP工匠遷移:回滾

改變你的運營商表遷移這樣,

Schema::create('operators', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name', 100)->unique(); 
     $table->string('email', 100); 
     $table->boolean('notify')->default(false); 
     $table->timestamps(); 
    }); 

,你必須創建一個映射表像,

Schema::create('station_operators', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('stations_id')->unsigned(); 
     $table->integer('operators_id')->unsigned(); 
     $table->timestamps(); 

     $table->foreign('stations_id')->references('id')->on('stations'); 
     $table->foreign('operators_id')->references('id')->on('operators'); 
    }); 

運行遷移php artisan mi篦

您的電臺型號:

public function StationOperators() { 
    return $this->hasMany(StationOperators::class); 
} 

你的運營商型號:

public function StationOperators() { 
    return $this->hasMany(StationOperators::class); 
} 

你StationOperators型號:

public function Stations() { 
    return $this->belongsTo(Stations::class); 
} 

public function Operators() { 
    return $this->belongsTo(Operators::class); 
} 

對於聯想,

$station = new Stations; 
    $station->name = request('name'); 
    $station->save(); 
    foreach (request('operators') as $operator) { 
     // $tempOperator = Operators::find($operator); 
     // $station->StationOperators()->associate($tempOperator)->save(); 

     $data = [ 
      'stations_id' => $station->id, 
      'operators_id' => $operator, 
     ]; 

     $stationOperator = new \App\StationOperators(); 
     $stationOperator->save(); 
    } 
+0

做到了,同樣的結果不幸... – Jim

+0

更新了我的答案。希望能幫助到你。 – Naveen

+0

謝謝你的時間!仍然得到同樣的東西。三重檢查了一切,似乎我擁有它一切..一個問題,但應該StationOperators模型是模型還是樞軸? – Jim