2016-05-03 11 views
2

Ich habe hasMany Beziehung zu meinem Modell Benutzer und Berichte. Ich möchte den Autorennamen für die Berichte festlegen. (Wie ein Blog-post Autor)Speichern von Daten mit Namen des Autors - Laravel 5.2

mein Modell Benutzer:

public function reports() { 
    return $this->hasMany('App\Report', 'author_id'); 
} 

Modell Bericht

public function user() { 
    return $this->belongsTo('App\User', 'author_id'); 
} 

und mein Controller:

public function create() 
{ 
    $category = Category::lists('title','id'); 
    return view('dash.reports.create')->with('category', $category); 
} 

/** 
* Store a newly created resource in storage. 
* 
* @return void 
*/ 
public function store(Request $request) 
{ 
    $this->validate($request, ['title' => 'required', ]); 

    Report::create($request->all()); 

    Session::flash('flash_message', 'Report added!'); 

    return redirect('dash/reports'); 
} 

Ich kann in phpmyadmin einstellen, aber wie kann ich es mit meinem Controller einstellen?

edit: meine Ansicht:

{!! Form::open(['url' => '/dash/reports', 'class' => 'form-horizontal']) !!} 

     <div class="form-group {{ $errors->has('title') ? 'has-error' : ''}}"> 
      {!! Form::label('title', 'Servizio', ['class' => 'col-sm-3 control-label']) !!} 
      <div class="col-sm-6"> 
       {!! Form::text('title', null, ['class' => 'form-control', 'required' => 'required']) !!} 
       {!! $errors->first('title', '<p class="help-block">:message</p>') !!} 
      </div> 
     </div> 

     <div class="form-group {{ $errors->has('title') ? 'has-error' : ''}}"> 
      {!! Form::label('date', 'Data lavorativa', ['class' => 'col-sm-3 control-label']) !!} 

      <div class="col-sm-2"> 
       {!! Form::selectRange('day', 1, 31, null, ['class' => 'form-control']) !!} 
       {!! $errors->first('day', '<p class="help-block">:message</p>') !!} 
      </div> 

      <div class="col-sm-2"> 
       {!! Form::selectMonth('month', null, ['class' => 'form-control']) !!} 
       {!! $errors->first('month', '<p class="help-block">:message</p>') !!} 
      </div> 

      <div class="col-sm-2"> 
       {!! Form::select('year', array('2016' => '2016', '2015' => '2015'), null, ['class' => 'form-control']) !!} 
       {!! $errors->first('year', '<p class="help-block">:message</p>') !!} 
      </div> 
     </div> 

     <div class="form-group {{ $errors->has('category_id') ? 'has-error' : ''}}"> 
      {!! Form::label('category_id', 'Cliente', ['class' => 'col-sm-3 control-label']) !!} 
      <div class="col-sm-6"> 
       {!! Form::select('category_id', $category, null, ['class' => 'form-control']) !!} 
       {!! $errors->first('category_id', '<p class="help-block">:message</p>') !!} 
      </div> 
     </div> 


<div class="form-group"> 
    <div class="col-sm-offset-3 col-sm-3"> 
     {!! Form::submit('Create', ['class' => 'btn btn-primary form-control']) !!} 
    </div> 
</div> 
{!! Form::close() !!} 
+0

ich helfen kann, aber ich bin ein wenig unklar auf etwas. Haben Sie eindeutige IDs für Benutzer, Autor und Bericht (automatisch inkrementierter Primärschlüssel)? Wenn ja, ist es einfacher. – DrewT

+0

Zum Beispiel so etwas wie 'DB :: table ('reports') -> wo ('id', 1) -> update (['author_id' => $ user_id]);' – DrewT

Antwort

5

Sehr einfach. Ersetzen Sie Report::create... mit diesem.

$user = Auth::user(); 
$report = new Report($request->all()); 
$report->author()->associate($user); 
$report->save(); 

Vergewissern Sie sich use Auth; oben an der Spitze.

Dieses das Auth Objekt verwendet den aktuellen Benutzer zu erhalten,
baut ein neues Report die $request Daten ohne Einsparung verwenden,
Teilt dem Bericht, den wir $user als author für das Modell sind assoziieren,
Saves der Bericht mit den Autoreninformationen.

+0

Dies ist eine viel bessere OOP-Methode als rohe Aktualisierung nach meinem Kommentar :) – DrewT

+0

ich versuche, aber nach dem Drücken der Taste den Browser zurückgeben mir leere Seite bearbeiten Sie meinen Beitrag zum Einfügen der Ansicht – user0111001101

+1

Könnte eine beliebige Anzahl von Dingen sein. – Josh

0

Lösung:

public function store(Request $request) 
{ 
    $this->validate($request, ['title' => 'required', ]); 

    $user = Auth::user()->id; 
    $report = new Report($request->all()); 
    $report->author_id = $user; 
    $report->save(); 

    Session::flash('flash_message', 'Report added!'); 

    return redirect('dash/reports'); 
} 
Verwandte Themen