2014-03-19 13 views
10

Ich versuche, verwandte Modelle während der Datenbank-Seeding in Laravel 4 zu assoziieren. Nach der Dokumentation here kann ich es so tun:Laravel "undefined Methode Illuminate Datenbank Query Builder :: attach()"

$user->roles()->attach(1); 

Also, in meiner Datenbank Samen ich bin mit:

$package = Package::create([ 
    'name' => $faker->word, 
    'summary' => $faker->sentence, 
    'base_price' => $faker->randomFloat(2, 200, 10000) 
]); 

// Attach 1-5 randomly selected items to this package 
foreach(range(1, 5) as $index) 
{ 
    $randomItem = Item::orderBy(DB::raw('RAND()'))->first(); 
    $package->items()->attach($randomItem->id); 
} 

Die Pakete Produkte haben bereits an dieser Stelle ausgesät worden, und sie ohne Probleme Saatgut. Der obige Code gibt dies von Artisan aber:

[BadMethodCallException]            
Call to undefined method Illuminate\Database\Query\Builder::attach() 

Jemand here scheint zu denken, dass die attach() Methode existiert nicht wirklich und die Dokumentation ist falsch, aber ich finde, dass schwer zu glauben.

TL; DR Wie lautet die richtige Methode zum Erstellen von Viele-zu-Viele-Beziehungen in Eloquent?

+1

Sie haben uns den Code in Ihrer 'items()' Methode nicht gezeigt. –

Antwort

24

Die Funktion items() in Ihrem Paket Modell hat eine BelongsToMany Beziehung zurückzukehren, um attach() zu verwenden.

public function items() { 
    return $this->belongsToMany('Item'); 
} 
+2

Das war es. Ich dachte, hat viele und gehört zu vielen waren für viele-zu-viele-Beziehungen verwendet - eigentlich gehört zu vielen auf beiden Seiten, wie Sie sagen. – glasstree

Verwandte Themen