2014-05-21 152 views
0

我有3張桌子。很多很多關係laravel

  1. 帖子
  2. 類別
  3. category_post。

我想在category_post表中添加category_id和post_id時,使用類別發表帖子。我有複選框的類別。

主要主題是,我想創建多個類別的帖子。所以我想在category_post表中添加category_id和post_id。

它可能與laravel?

我見過很多教程,現在我很累。請幫幫我。

請參閱下面的代碼。

我的遷移表:

<?php 
use Illuminate\Database\Migrations\Migration; 
use Illuminate\Database\Schema\Blueprint; 

class CreateCategoriesTable extends Migration { 

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('categories', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('category_slug'); 
     $table->timestamps(); 
    }); 
} 


    public function up() 
{ 
    Schema::create('posts', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('title'); 
     $table->string('slug'); 
     $table->string('meta'); 
     $table->text('body'); 
     $table->string('image'); 
     $table->timestamps(); 
    }); 
} 
    public function up() 
{ 
    Schema::create('category_post', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('category_id')->unsigned()->index(); 
     $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
     $table->integer('post_id')->unsigned()->index(); 
     $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); 
    }); 
} 


/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('categories'); 
} 

    public function down() 
{ 
    Schema::drop('posts'); 
} 

    public function down() 
{ 
    Schema::drop('category_post'); 
} 
    } 

我交控制器:

<?php 

    class PostsController extends \BaseController { 

/** 
* Display a listing of posts 
* 
* @return Response 
*/ 
public function index() 
{ 
    $posts = Post::all(); 

    return View::make('admin.posts.index', compact('posts')); 
} 

/** 
* Show the form for creating a new post 
* 
* @return Response 
*/ 
public function create() 
{ 
    $categories = Category::all(); 


    return View::make('admin.posts.create',compact('categories')); 
} 

/** 
* Store a newly created post in storage. 
* 
* @return Response 
*/ 
public function store() 
{ 
    $validator = Validator::make($data = Input::all(), Post::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    Post::create($data); 

    return Redirect::route('admin.posts.index'); 
} 

/** 
* Display the specified post. 
* 
* @param int $id 
* @return Response 
*/ 
public function show($id) 
{ 
    $post = Post::findOrFail($id); 

    return View::make('admin.posts.show', compact('post')); 
} 

/** 
* Show the form for editing the specified post. 
* 
* @param int $id 
* @return Response 
*/ 
public function edit($id) 
{ 
    $post = Post::find($id); 

    return View::make('admin.posts.edit', compact('post')); 
} 

/** 
* Update the specified resource in storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function update($id) 
{ 
    $post = Post::findOrFail($id); 

    $validator = Validator::make($data = Input::all(), Post::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    $post->update($data); 

    return Redirect::route('admin.posts.index'); 
} 

/** 
* Remove the specified resource from storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function destroy($id) 
{ 
    Post::destroy($id); 

    return Redirect::route('admin.posts.index'); 
} 

    } 

我的帖子型號:

<?php 

    class Post extends \Eloquent { 

// Add your validation rules here 
public static $rules = [ 
    'title'=>'required|min:2', 
    'image'=>'required|image|mimes', 
    'body' =>'required' 
]; 

// Don't forget to fill this array 
protected $fillable = ['title','meta','slug','image','body']; 

public function categories() 
{ 
    return $this->belongsToMany('Category'); 
} 

} 

我的類別控制器:

<?php 

class CategoriesController extends \BaseController { 

public function __construct() 
{ 
    $this->beforeFilter('csrf',['on'=>'post']); 
} 

/** 
* Display a listing of categories 
* 
* @return Response 
*/ 
public function index() 
{ 
    $categories = Category::all(); 

    return View::make('admin.categories.index', compact('categories')); 
} 

/** 
* Show the form for creating a new category 
* 
* @return Response 
*/ 
public function create() 
{ 
    return View::make('admin.categories.create'); 
} 

/** 
* Store a newly created category in storage. 
* 
* @return Response 
*/ 
public function store() 
{ 
    $validator = Validator::make($data = Input::all(), Category::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    Category::create($data); 

    return Redirect::route('admin.categories.index'); 
} 

/** 
* Display the specified category. 
* 
* @param int $id 
* @return Response 
*/ 
public function show($id) 
{ 
    $category = Category::findOrFail($id); 

    return View::make('admin.categories.show', compact('category')); 
} 

/** 
* Show the form for editing the specified category. 
* 
* @param int $id 
* @return Response 
*/ 
public function edit($id) 
{ 
    $category = Category::find($id); 

    return View::make('admin.categories.edit', compact('category')); 
} 

/** 
* Update the specified resource in storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function update($id) 
{ 
    $category = Category::findOrFail($id); 

    $validator = Validator::make($data = Input::all(), Category::$rules); 

    if ($validator->fails()) 
    { 
     return Redirect::back()->withErrors($validator)->withInput(); 
    } 

    $category->update($data); 

    return Redirect::route('admin.categories.index'); 
} 

/** 
* Remove the specified resource from storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function destroy($id) 
{ 
    Category::destroy($id); 

    return Redirect::route('admin.categories.index'); 
} 

    } 

我的類別型號:

<?php 

    class Category extends \Eloquent { 
protected $fillable = ['name','category_slug']; 

public static $rules = ['name'=>'required|min:3','category_slug'=>'required|min:3']; 

public function posts() 
{ 
    return $this->belongsToMany('Post'); 
} 
} 

我創建後查看:

@extends('admin.layouts.main') 

@section('content') 
<h2>Create Post</h2> 

@if ($errors->has()) 
    <div class="error"> 
     <p>The Following errors have</p> 

     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

{{ Form::open(array('action' => '[email protected]')) }} 

<p> 
    {{ Form::label('title') }} 
    {{ Form::text('title') }} 
</p> 
<p> 
    {{ Form::label('meta') }} 
    {{ Form::text('meta') }} 
</p> 
<p> 
    {{ Form::label('slug') }} 
    {{ Form::text('slug') }} 
</p> 
<p> 
    {{ Form::label('body') }} 
    {{ Form::text('body') }} 
</p> 
<p> 
    @foreach ($categories as $category) 
     {{ Form::checkbox('category_id', $category->id) }} 
     {{ Form::label($category->name) }} 
    @endforeach 
</p> 
<p> 
    {{ Form::label('image') }} 
    {{ Form::text('image') }} 
</p> 

{{ Form::submit('Crate Post') }} 
{{ Form::close() }} 

@stop 

我的路線:

<?php 

/* 
|-------------------------------------------------------------------------- 
| Application Routes 
|-------------------------------------------------------------------------- 
| 
| Here is where you can register all of the routes for an application. 
| It's a breeze. Simply tell Laravel the URIs it should respond to 
| and give it the Closure to execute when that URI is requested. 
| 
*/ 

Route::get('/', function() 
{ 
return View::make('hello'); 
}); 

Route::resource('admin/categories', 'CategoriesController'); 

Route::resource('admin/posts', 'PostsController'); 

請幫助我。如何在categoy_post表中添加category_id和post_id ????????

回答

2

首先,你需要的類別一組ID:

// view 
@foreach ($categories as $category) 
    {{ Form::checkbox('categories[]', $category->id, $post->categories->contains($category->id)) }} 
    {{ Form::label($category->name) }} 
@endforeach 

如果使用模型編輯時綁定,然後重命名categories[]到別的東西,以避免字段名稱衝突

然後,你需要將帖子與這些類別同步:

// posts controller @store 

... // validate everything, categories too 

$categories = Input::get('categories'); 

$post = Post::create($data); 

$post->categories()->sync($categories); 

return Redirect::route('admin.posts.index'); 
+0

謝謝@deczo它的工作..許多很多謝謝 – saiful408

+0

如果確實讓別人知道,請將其標記爲正確答案。 –

+0

你好deczo,現在我可以創建帖子。但是,當我嘗試編輯這篇文章,然後類別不檢查。但它是必要的。如何從數據透視表設置複選框類別的值?這意味着,我想顯示類別檢查,我選擇了後。請幫幫我。 – saiful408