Laravel : Speichern einer Zugehörig-zu-Mann-Beziehung
Lesezeit: 4 Minuten
Ich möchte eine neue Signatur in meiner Tabellensignatur speichern. Jede Signatur kann mit mehreren Benutzern verknüpft werden. Ich habe eine viele-zu-viele-Tabelle zwischen Benutzern und Signaturen.
Meine Modellsignatur lautet:
class Signature extends Model {
public $fillable = ['name', 'template'];
public function users() {
return $this->belongsToMany('App\User');
}
}
Mein Controller SignatureController.php ist:
public function store(CreateSignaturesRequest $request)
{
//return $user_id;
$values = $request->only(['name','template']);
Signature::create($values));
return response()->json(['message'=>'SUCCESS'], 201);
}
Wie kann ich meine Signatur erstellen und mit einem Benutzer verknüpfen?
Ich habe es versucht
Signature::create($values)->associate($user_id);
Vielen Dank
fahad.hasan
In Anbetracht Ihrer Tabellen sind Benutzer, Signaturen und user_signatures
Definieren Sie die Beziehung im Modell: User.php
class User extends Model {
public function signatures() {
return $this->belongsToMany('\App\Signature', 'user_signatures');
}
}
Definieren Sie die Umkehrung der Beziehung in model: Signature.php
class Signature extends Model {
public function users() {
return $this->belongsToMany('\App\User', 'user_signatures');
}
}
In Ihrem Controller können Sie Folgendes tun:
//create a new signature
$signature = new Signature($values);
//save the new signature and attach it to the user
$user = User::find($id)->signatures()->save($signature);
Danke vielmals ! Es kommt vor, dass ich eine relationale Tabelle mit dem Namen user_signature und nicht signature_user habe, daher gibt mir dieser Befehl einen Fehler, weil die Zieltabelle nicht existiert. Weißt du, was ich tun muss?
– Yobogs
8. Juni 2015 um 9:46 Uhr
Ändern Sie das zweite Argument in Ihrer Methode „gehört zu“ durch den entsprechenden Tabellennamen. Das sollte es gut aufnehmen.
– fahad.hasan
8. Juni 2015 um 9:49 Uhr
Es gibt einen Tippfehler in der letzten Codezeile $user->signature() ohne “s” am Ende der Signatur.
– Spitze
10. Mai 2021 um 3:44 Uhr
Saiyajin Prinz
Sie müssen einen Tisch aufgerufen haben user_signature mit folgendem Schema:
Dann deine User Modell sollte die folgende Methode haben:
Model User
public function signatures() {
return $this->belongsToMany('App\Signature');
}
Nun, da Sie die entwickelt haben Many-To-Many Beziehung zwischen den Modellen, was Sie tun können, ist dies:
Beim Speichern eines neuen Datensatzes (der Controller, den Sie für die Signatur verwenden):
/**
* Insert the signature
*
* @param Request $request
* @return ...
*/
public function store( Request $request ) {
// your validation
$signature->users()->attach( $request->input('user_id') );
// return
}
Ähnlich beim Aktualisieren des Datensatzes (der Controller, den Sie für die Signatur verwenden):
/**
* Update the signature with the particular id
*
* @param $id
* @param Request $request
* @return ...
*/
public function update( $id, Request $request ) {
// your validation
$signature->users()->sync( $request->input('user_id') );
// return
}
Vielen Dank, sehr klare Antwort! Allerdings muss ich das Speichern auf der Signaturseite vornehmen; nicht auf der Benutzerseite. Ist das möglich ? Wie ?
– Yobogs
8. Juni 2015 um 9:42 Uhr
Ich habe die Antwort bearbeitet, Sie können sie sich ansehen.
Danke vielmals ! Es kommt vor, dass ich eine relationale Tabelle mit dem Namen user_signature und nicht signature_user habe, daher gibt mir dieser Befehl einen Fehler, weil die Zieltabelle nicht existiert. Weißt du, was ich tun muss?
– Yobogs
8. Juni 2015 um 9:42 Uhr
14304500cookie-checkLaravel : Speichern einer Zugehörig-zu-Mann-Beziehungyes