2016-08-03 5 views
1

Hallo, ich bin ein neues Laravel, ich habe ein Problem mit meinem Projekt. Ich habe 2 Tabelle:Wie fügt man einen Beitrag mit mehreren Kategorien und mit mehrspaltigen Kategorien in Laravel ein?

posts: id title category_id 
category: id name(PHP, Laravel, Ruby) 

Ex: Ich führen wollen wie, wenn ich einen Beitrag in Beiträge Datenbanktitel am einfügen = Jonh und chosse zwei Kategorienamen (PHP, Laravel), und das Ergebnis wird zweispaltigen wie Beiträge (id = 1 title (jonh) kategorie_id (1), id = 2 titel (jonh) kategorie_id (2)) aber es funktioniert immer noch nicht Ich versuche in google zu finden und youtube folge und es funktioniert nicht, und hier ist mein code:

View(create.blade.php) 
{!!Form::open(array('route' => 'store', 'method' => 'POST'))!!} 

{{Form::text('title')}}<br> 

@foreach($category as $categories) 
{{Form::label('category',$categories->name)}} 
{{Form::checkbox('category_id', $categories->id) }} 
@endforeach 
<br> 
{{Form::submit('submit')}} 
{!!Form::close()!!} 

Controller(PostsController.php) 
public function create() 
    { 
     $category = Category::all(); 
     return view('create',compact('category')); 
    } 
    public function store(Request $request) 
    { 
     $post = new Posts; 
     $post->title = $request['title']; 
     $post->category_id = $request['category_id']; 
     $post->save(); 
    } 

Hilfe pls

+0

Bitte geben Auskunft über das, was geschieht, als andere *, aber ich kann nicht *. – TheFallen

+0

ok ich aktualisiert, sorry mein armes Englisch – user307709

+0

Ich möchte einen Beitrag in Multi-Spalte mit Kategorien einfügen, mir helfen pls – user307709

Antwort

1

Ihre Beziehung zwischen Post und Kategorie ist falsch. Ein Beitrag sollte eine oder mehrere Kategorien haben, und eine Kategorie sollte keinem oder mehreren Beiträgen zugeordnet sein.

Beitrag hasMany Kategorie
Kategorie hasMany Beitrag

Im Folgenden haben wir die Struktur Tabellen:

----- ----- Beiträge
id INT
Titel VARCHAR (100)
Körper TEXT

----- Kategorie_p ost -----
category_id INT
post_id INT

----- ----- Kategorien
id INT
Name VARCHAR (100)

Was Sie tun sollten:

1 - erstellen Sie eine neue Migrationstabelle category_post

<?php 

// migrations/****_**_**_******_create_posts_table.php 
Schema::create('posts', function(Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title', 100); 
    $table->text('body'); 
}); 

// migrations/****_**_**_******_create_categories_table.php 
Schema::create('categories', function(Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name', 100); 
}); 

// migrations/****_**_**_******_create_category_post_table.php 
Schema::create('category_post', function(Blueprint $table) { 
    $table->integer('category_id')->unsigned(); 
    $table->integer('post_id')->unsigned(); 
    $table->foreign('category_id')->references('id')->on('categories')->onUpdate('cascade')->onDelete('cascade'); 
    $table->foreign('post_id')->references('id')->on('posts')->onUpdate('cascade')->onDelete('cascade'); 
}); 

2 - Ändern Sie die Beziehung zwischen Post und Kategorie in Ihren Eloquent-Modellen.

<?php 

// Post.php 
public function categories() 
{ 
    return $this->hasMany(Category::class); 
} 

// Category.php 
public function posts() 
{ 
    return $this->hasMany(Post::class); 
} 

Jetzt können Sie etwas tun:

// PostController.php 
public function create() 
{ 
    $categories = Category::all(); 

    return view('posts.create', compact('categories')); 
} 

public function store(Request $request) 
{ 
    $post = new Post(); 
    $post->title = $request->name; 
    $post->body = $request->body; 
    $post->categories()->attach($request->categories_id); 

    return redirect()->route('posts.index'); 
} 

// views/posts/create.blade.php 
<select name="categories_id" multiple> 
@foreach ($categories as $category) 
    <option value="{{ $category->id }}">{{ $category->name }}</option> 
@endforeach 
</select> 
+0

ok danke dir :) – user307709

+0

Sehr nützlich für mich :) vielen dank :) – user307709

Verwandte Themen