2017-11-30 18 views
0

Ich mache eine Bearbeitungsseite, um Beiträge auf meiner Website zu bearbeiten, Jeder Beitrag ist innerhalb eines Kanals. . Wenn ich versuche, den Beitrag zu bearbeiten, ohne den Sender zu wechseln es in ist Es gibt mir einen seltsamen Fehler, der besagt:Laravel - Weird Ungültige Datum Uhrzeit Formatfehler beim Aktualisieren Post

Invalid DateTime format: 1366 Incorrect integer value: 'PHP' for column 'channel_id' at row 1 

Aber wie auch immer, wenn ich auch den Kanal bearbeiten, funktioniert es völlig in Ordnung. Was verursacht das? Ich denke, es hat etwas mit meiner Form zu tun. Ein Beitrag hat eine channel_id. damit verbindet es sich mit einem Kanal mit dieser ID. Die Beziehungen zwischen den beiden sind in Ordnung.

Dies ist das das Stück Form, die ich denke, das Problem verursacht:

<div class="form-group row"> 
    <div class="col-md-12"> 
     <label for="Kanaal">Kanaal:</label> 
    </div> 
    <div class="col-md-12"> 
    <select class="form-control" id="Kanaal" name="channel_id"> 
     <option selected>{{ $post->channel->channel_name }}</option> 
     @foreach($channels as $channel) 
     <option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : '' }}> 
     {{ $channel->channel_name }} 
     </option> 
     @endforeach 
    </select> 
    </div> 
</div> 

Das Verfahren, in dem ich die aktualisierte Post speichern wie folgt aussieht:

public function updatePost(Request $request, $id) 
{ 

    $post = Post::find($id); 
    $post->channel_id = $request->channel_id; 
    $post->title = $request->title; 
    $post->text = $request->text; 
    $post->slug = str_slug($request->title); 

    $post->save(); 

    return back()->with('flash', 'Het bericht is bewerkt!'); 
} 

Es die Methode ganz gut erreicht . Aber wenn ich das channel option tag nicht bearbeite gibt es mir diesen Fehler, während wenn ich es bearbeite, funktioniert es gut.

Ich weiß nicht, ob ich das gut erklären, aber das ist das Beste, was ich tun kann. Danke im Voraus!

+1

'' verursacht Problem, da es standardmäßig ausgewählt ist und es keinen Integer-Wert enthält und in Ihrer Datenbank 'channel_id' ist eine ganze Zahl –

+0

Ich brauche es, um den Benutzer wissen zu lassen, in welchem ​​Kanal es ist. Und wenn sie es ändern wollen, können sie das tun. Wie kann ich das fehlerfrei erreichen? –

+0

'' sollte nicht in der Liste vorhanden sein, da Sie alle Beiträge zu Beiträgen haben und für Ihre Standardoption gibt es keine Kanal-ID – RohitS

Antwort

0

Statt dies zu tun

$post = Post::find($id); 
    $post->channel_id = $request->channel_id; 
    $post->title = $request->title; 
    $post->text = $request->text; 
    $post->slug = str_slug($request->title); 

bitte versuchen Sie es auf diese Weise statt

$post = Post::find($id); 
$post->channel_id = $request->get('channel_id'); 
$post->title = $request->get('title'); 
$post->text = $request->get('text'); 
$post->slug = str_slug($request->get('title')); 

ich hoffe, dass dies helfen wird.

0

<option selected>{{ $post->channel->channel_name }}</option> verursacht Problem, da es standardmäßig ausgewählt ist und es keine Integer-Wert enthält und in Ihrer Datenbank channel_id ist eine ganze Zahl.

Wenn es ein Pflichtfeld ist, dann verwenden Sie bitte required Attribut in select Tag und ändern Sie Ihre erste Option. Um das zu tun Änderung

<div class="form-group row"> 
    <div class="col-md-12"> 
     <label for="Kanaal">Kanaal:</label> 
    </div> 
    <div class="col-md-12"> 
    <select class="form-control" id="Kanaal" name="channel_id"> 
     <option selected>{{ $post->channel->channel_name }}</option> 
     @foreach($channels as $channel) 
     <option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : '' }}> 
     {{ $channel->channel_name }} 
     </option> 
     @endforeach 
    </select> 
    </div> 
</div> 

zu

<div class="form-group row"> 
    <div class="col-md-12"> 
     <label for="Kanaal">Kanaal:</label> 
    </div> 
    <div class="col-md-12"> 
    <select class="form-control" id="Kanaal" name="channel_id" required="required"> 
     <option value="">Select Channel</option> 
     @foreach($channels as $channel) 
     <option value="{{ $channel->id }}" {{ $post->channel_id == $channel->id ? 'selected' : null }}> 
     {{ $channel->channel_name }} 
     </option> 
     @endforeach 
    </select> 
    </div> 
</div> 
0

so etwas wie dies versuchen, wenn Sie nur einige Attribute der Anfrage

// Return the post object 
$post = Post::find($id); 

// Do your conversion of title to 'slug' 
$request['slug'] = str_slug($request->title); 

// Call the update method on the model to update 
$post->update($request->only(
    'channel_id' 
    'title', 
    'text', 
    'slug' 
)); 

// Explicit save 
$post->save(); 

Es klingt verwenden möchten, wie Ihr Fehler wahrscheinlich herkommt irgendwo in Ihrem Formular Anfrage, die in Ihrem Beispiel nicht angezeigt wird. Zum Beispiel haben Sie möglicherweise eine Datumseingabe, die versucht, in Ihre channel_id-Spalte einzufügen (doppelte name Attribute auf Formulareingaben könnten die Ursache sein).

Hoffe, das hilft!