Hinzufügen von Daten auf mehrere Tabellen mit einem einzigen Formular Laravel

Ich versuche das einfügen eines blog-post auf die db, ich habe zwei Tabellen posts und tags, Tabellen. Wenn ich einfügen das erstellen des post möchte ich einfügen zu können die Daten aus dem Formular in den zwei verschiedenen Tabellen.

create.blade.php;

<div class="account_grid">

<div class="col-md-6 login-right wow fadeInRight col-md-offset-3" data-wow-delay="0.4s">
    <h3>CREATE A BLOG POST</h3>
    <p>Please fill out the required fields *</p>
    <form method="post" action="/posts"  enctype="multipart/form-data">
         {{csrf_field()}}
        <div>
            <span>Title:<label>*</label></span>
            <input type="text" id="title" name="title"  > 
        </div>
        <div>
            <span>Body<label>*</label></span>
            <textarea id="body" name="body" rows="14"  ></textarea>
        </div>
        <div>
            <span>Tags:<label>*</label></span>
            <input type="text" id="tags" name="tags">
        </div>
        <div>
            <span>Image<label>*</label></span>
            <input type="file" name="image" id="image"  >
        </div>
        <input type="submit" value="Publish">

    </form>

@include('layouts.errors')
</div>  
<div class="clearfix"> </div>
</div>

Auf meiner route-Datei habe ich den Pfad, der führt zu PostsController.php die eine Speicher-Methode wie folgt:

PostsController.php

    public function store(Request $request){

        $this->validate($request, [

            'title' =>'required|max:48',
            'body'=>'required',
            'image'=>'required',
            'tags' =>'required|max:200'
        ]);

        $post = new Post;

        $destination ='uploads';
        $image = $request->file('image');
        $filename = $image->getClientOriginalName();
        $image->move($destination, $filename);
        $location=$destination.'/'.$filename;
        $tags = request('tags');


           Post::create([
            'title'=>request('title'),
            'body' =>request('body'),
            'user_id'=>auth()->id(),
            'image' =>$destination.'/'.$filename

        ]);

        $tag = new Tag;

        Tag::create([

            'name' => $tags
        ]);

        return redirect('/blog');
    }
}

Der Sache ist, dass wenn ich die Methode aufrufen, ich will die Daten des Formulars gespeichert werden, die auf zwei verschiedene Tabellen, die ich versucht habe wie unten aber ich erhalte FEHLER:

MassAssignmentException in Model.php Linie 232:
name

Habe ich das Problem untersuchen, aber kein Glück; und ja, ich habe die Namen aufgelistet, die in den protected $fillable array. Irgendwelche Vorschläge, wie zum speichern der Daten in zwei unterschiedlichen Tabellen oder welche Art von Beziehung sollte ich verwenden.

Auf post.php Modell habe ich eine Beziehung angegeben. Tags belongsToMany als auch auf meinem tag.php Modell Post belongsToMany

p.s Neue zu Laravel.

tag.php Modell:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    //

        public function posts(){

        return $this->belongsToMany(Post::class);
    }

    public function getRouteKeyName(){

        return 'name';

    }
}

Post.php Modell:

<?php

namespace App;
use Carbon\Carbon;
class Post extends Model
{

    public function comments(){

        return $this->hasMany(Comment::class);
    }

    public function addComment($body, $name, $email, $user_id){

        $this->comments()->create(compact('body','name','email', 'user_id'));
    }

    public function user(){ //$comment->user->name

        return $this->belongsTo(User::class);
    }

    public function scopeFilter($query, $filters){

        if($month =$filters['month']){
//           
            $query->whereMonth('created_at', Carbon::parse($month)->month);
        }

        if($year = $filters['year']){

            $query->whereYear('created_at',$year );
        }
    }

    public static function archives(){
        return static:: selectRaw('year(created_at)year, monthname(created_at)month, count(*) published')
       ->groupBy('year','month')
       ->orderByRaw('min(created_at) desc')
       ->get()
       ->toArray();
    }

    public function tags(){

        return $this->belongsToMany(Tag::class);
    }



}
  • Kann man dd($tags); und poste das Ergebnis. Ich muss sehen, dass das tag-format übergeben Sie aus der form. Auch sollten Sie nicht erstellen Sie die tags so, wenn Sie eine Beziehung haben. Teilen Sie Ihre Post-und Tag-Modell zusammen mit der Struktur der Tabelle. Ich zeige Ihnen, wie Sie dieses Recht tun.
  • Ich habe getan, dd bekomme ich die tags als string (ja, das ist, wie ich Sie einfügen möchten, um es später werde ich str_replace) brauche ich nur, um es gleich jetzt. Ja, ich werde Sie hinzufügen.
  • Teilen Sie einfach Ihre Wert bitte. Sie arbeiten mit Beziehungen hier, also müssen Sie aufgeteilt werden die tags richtig und dann erstellen Sie Sie, und befestigen Sie es an die post.
  • überprüfen Sie es jetzt. Sie sind da
  • Die Modelle sehen gut aus, außer Sie sind nicht die $fillable Eigenschaft. Ohne die Ihr create-Aufruf über das Modell nicht funktionieren. Haben Sie es während der Buchung oder tun Sie es nicht haben in Ihrem Modell? Auch der Wert des tag-Feld aus dem Formular.
  • Ich habe die $fillable Methode auf meine Eltern-model-Klasse; ich habe meine eigenen Model-Klasse und die ausfüllbare variable deklariert, die Klasse.
  • Lassen Sie uns weiter, diese Diskussion im chat.

InformationsquelleAutor Leorent | 2017-06-04
Schreibe einen Kommentar