2016-08-03 9 views
1

重要なモデルは2種類あります。ResumeSkillです。 Resumeには多くのスキルがあります。ResumeSkillLaravel定義されていないメソッドを呼び出すhasManyThrough関係のために Database Query Builder :: detach/attach()を照らします

スキルを使用してフォームを送信すると、フォームを追加して再開する前に、スキルをすべて削除します。

しかし、私は方法attach()detach()実行すると、この問題を抱えている:

未定義のメソッドを照らし\ Databaseへのコール\クエリー\ビルダー::切り離す()

をこれは、私再開モデルクラス:

use Illuminate\Database\Eloquent\SoftDeletes; 
use Illuminate\Database\Eloquent\Model; 

class Resume extends BaseModel{ 
    public function skills(){ 
     return $this->hasManyThrough('\myApp\Skill', '\myApp\ResumeSkill'); 
    } 
} 

そして、メインスクリプト:

$record = \myApp\Resume::find($id); 
$record->skills()->detach(); 
foreach($skills as $skill_id){ 
    $record->skills()->attach($skill_id); 
} 

どうしたのですか?私が見ている答えは、attach()ですが、BelongsToメソッドですが、古い回答でなければなりません:https://laravel.com/docs/5.2/eloquent-relationships#has-many-through。とにかく、関連/解離もうまくいきません。

は私がBelongsToManyを使用している必要があります

を@solved。そして、attach/detachDOESは、この関係で動作します。

答えて

2

hasManyThroughは、中間関係を介して遠隔のリレーションにアクセスするためのショートカットです。多対多関係の場合は、belongsToManyメソッドを定義します。

public function skills() { 
    return $this->belongsToMany('App\Skill', 'ResumeSkill', 'idResume', 'idSkill'); 
} 
+0

ただし、中間テーブルがあります。遠い関係は何ですか? –

+0

国、ユーザー、コメントなど3つのテーブルがあり、特定の国のすべてのコメントを取得したい場合。 Countryモデルでは、この実装を使用します。public function comments(){return $ this-> hasManyThrough( 'App \ Comment'、 'App \ User'); } –

関連する問題