2016-07-23 5 views
0

Ich kann den aktuellen Benutzer, der sich angemeldet hat, abrufen. Aber ich weiß nicht, wie kann ich dies in Variable übergeben. Ich kann die Benutzer-ID dadurch.Wie übergebe ich die Auth :: user() -Methode an die Variable und synchronisiere sie in Pivot-Tabelle?

Kann mir jemand sagen, wie kann ich die aktuelle Benutzer-ID synchronisieren, wenn der Absenden-Button gesendet wird. Gibt es eine Möglichkeit, wie kann ich die ID des Benutzers in der Synchronisierungsmethode anhängen?

public function postDocuments(Request $request) 
{ 

    $this->validate($request, 
    [ 
     'title' => 'required|alpha_dash|max:255', 
     'content' => 'required', 
     'category_id' => 'required', 
     'recipient_id' => 'required', 
    ]); 


    $document = new Document(); 
           //Request in the form 
    $document->title = $request->title; 
    $document->content = $request->content; 
    $document->category_id = $request->category_id; 

    $document->save(); 
    $document->recipients()->sync($request->recipient_id, false); 

    return redirect()->back(); 
} 

UPDATE!

Laut @Ariful. Ich kann die Instanz Auth::user(); hinzufügen, um die ID zu erhalten. Aber es gibt mir die ID nicht an meine Pivot-Tabelle zurück und gibt mir einen Fehler.

SQLSTATE [23000]: Integrität Einschränkungsverletzung: 1452 nicht hinzufügen können, oder ein Kind Zeile aktualisieren: ein Fremdschlüssel fehlschlägt (. webdevdocument_user, CONSTRAINT document_user_user_id_foreign FOREIGN KEY (user_id) LITERATUR users (id) ON DELETE CASCADE) (SQL: einfügen in document_user (document_id, user_id) Werte (59, 0))

public function postDocuments(Request $request) 
{ 

    $this->validate($request, 
    [ 
     'title' => 'required|alpha_dash|max:255', 
     'content' => 'required', 
     'category_id' => 'required', 
     'recipient_id' => 'required', 
    ]); 


    $user = Auth::user(); 
    $document = new Document(); 
           //Request in the form 
    $document->title = $request->title; 
    $document->content = $request->content; 
    $document->category_id = $request->category_id; 

    $document->save(); 
    $document->recipients()->sync([$request->recipient_id, $user->id, false]); 

    return redirect()->back(); 
} 

Models:

Benutzermodell

class User extends Model implements AuthenticatableContract 
{ 
    public function documents() 
    { 
    return $this->belongsToMany('App\Models\Document', 'document_user', 'user_id', 'document_id'); 
    } 
} 

Document Model:

class Document extends Model 
{ 
    public function recipients() 
    { 
    return $this->belongsToMany('App\Models\User', 'document_user', 'document_id', 'user_id'); 
    } 
} 

Migration:

Benutzermigration

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('first_name'); 
     $table->string('last_name'); 
     $table->string('middle_name'); 
     $table->string('email'); 
     $table->string('username'); 
     $table->string('address'); 
     $table->string('password'); 
    }); 
} 

Dokumente Migration:

public function up() 
{ 
    Schema::create('documents', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('title'); 
     $table->text('content'); 
     $table->integer('category_id')->unsigned(); 
     $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

documents_user Migration:

public function up() 
{ 
    Schema::create('document_user',function (Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->integer('document_id')->unsigned(); 

     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
     $table->foreign('document_id')->references('id')->on('documents')->onDelete('cascade'); 

     $table->unsignedInteger('sender_id')->nullable(); 
     $table->foreign('sender_id')->references('id')->on('users')->onDelete('cascade'); 


     $table->dateTime('dateReceived')->default(DB::raw('CURRENT_TIMESTAMP')); 
    }); 
} 

Screenshot Datenbank:

SC

UPDATE 2:

ich einen Wertes auf meinem User_id basierend auf der Auswahl des Benutzers in der Auswahlliste einfügen .

Hier werden die Werte des Formulars in die Spalte user_id eingefügt. Ich muss nur den aktuellen Benutzer in meine sender_id einfügen, damit ich feststellen kann, wer die Daten sendet.

<div class = "form-group"> 

     <label for = "recipient_id" class = "control-label">To:</label> 

     <select name = "recipient_id[]" multiple class = "form-control" id = "myUserList"> 

      @foreach ($resultRecipient as $list) 
       <option value = "{{ $list->id }}">{{ $list->username }}</option> 
      @endforeach 

    </select> 

</div> 

SC

Wie man hier sehen kann ich dies nur einfügen auf den Benutzer Tabellendaten manuell basiert.Habe noch keine Idee wie ich den aktuellen Benutzer in Spalte einfügen kann.

Antwort

1

Ich glaube, dass dieses

$user = Auth::user(); //get current user 

$document->recipients()->sync([$user->id]); 

auf dem Zwischen platzieren aktualisierten Arbeits sollte Source Link

$document->recipients()->sync([ $request->recipient_id, $user->id ], false); 

Wie pro documentation,

Die sync Verfahren eine Reihe von IDs akzeptiert Tabelle.

UPDATE 2

$document->recipients()->sync([ $request->recipient_id => 
            ['sender_id' => $user->id] ], 
            false); 

Ihr sender_id ist nicht Teil Ihrer Beziehung. Sie müssen es also als zusätzliche Information hinzufügen.

UPDATE 3

Nach der Diskussion, soll dies Ihr Hauptcode

foreach($request->recipient_id as $receipentId){ 

    $document->recipients()->sync([ $receipentId => 
           ['sender_id' => $user->id] ], 
           false); 
} 

Diese Schleife wird durch Ihre receipent_id Array sein und jede ID nimmt für die Synchronisation mit dem in Benutzer als $user->id angemeldet Strom;

+0

Ich kann nicht die Benutzer 'id' nach dem Einreichen der submit Ich habe versucht, in meiner' sync' Methode die '$ Anfrage-> recipient_id' hinzuzufügen. Aber es sagt 'SQLSTATE [23000]: Integritätseinschränkungsverletzung: 1452 Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (' webdev'.document_user', CONSTRAINT 'document_user_user_id_foreign' FREI KEY (' user_id') REFERENCES 'Benutzer '(' id') ON DELETE CASCADE) (SQL: Einfügen in 'document_user' (' document_id', 'user_id') Werte (59, 0))' Bitte lesen Sie meinen aktualisierten Beitrag. :) – Francisunoxx

+0

Können Sie bitte Ihren 'recipienten()' Code teilen? –

+0

Ich habe auch meine Migrationen aufgenommen. :) – Francisunoxx

Verwandte Themen