我想为数据库中的帖子创建多个类别,但我只需使用以下代码创建一个类别: post.php中
public function Category()
{
return $this->belongsTo('App\Category');
}
Category.php
public function posts()
{
return $this->belongsToMany('App\Post');
}
posts_table:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->integer('category_id');
$table->string('title');
$table->integer('price');
$table->string('description');
$table->timestamps();
});
}
和创建类别的视图在这里:
<form method="post" action="/storePost">
{{csrf_field()}}
<input type="hidden" id="user_id" name="user_id" value="
{{Auth::user()->id}}">
<lable>title</lable>
<input type="text" id="title" name="title">
<label>description</label>
<input type="text" id="description" name="description">
<label>price</label>
<input type="text" name="price" id="price">
<label>Category</label>
<select name="category_id">
@foreach($categories as $category)
<option value={{$category->id}}>{{$category->name}}</option>
@endforeach
</select>
<button type="submit" id="AddProduct">add</button>
</form>
我创建类别的postcontroller是:
public function store()
{
Post::create([
'user_id'=>request('user_id'),
'title' => request('title'),
'category_id'=>request('category_id'),
'description'=>request('description'),
'price'=>request('price'),
]);
return redirect('/show');
}
如何为表格中的一个帖子创建多个类别?
答案 0 :(得分:1)
您需要以不同的方式设计数据库。您需要在两个表之间使用正确的连接表。您的数据库应如下所示:
posts
id
//other
categories
id
//other
post_categories
post_id
category_id
使用正确的连接进行数据库设置后。你必须以不同的方式定义关系:
// App\Models\Post
public function categories() {
return $this->belongsToMany('App\Category', 'post_categories', 'category_id', 'post_id');
}
// App\Models\Category
public function posts() {
return $this->belongsToMany('App\Post', 'post_categories', 'post_id', 'category_id');
}
然后,您可以使用attach
和detach
添加和删除关系:
$post = Post::find(1);
$post->categories()->attach($categoryId);
您可以在Laravel Documentation中了解有关多对多关系的更多信息。