Laravel (API):我需要使用 API 请求 (React) 插入具有多个博客类别的 post

Laravel (API): I need to insert the post with Multiple Blog categories by using API Request (React)

我正在尝试为博客 post 创建一个功能,该功能应该使用基于 React 构建的前端应用程序和基于 Laravel 构建的我的 api 添加(5.6 ),

我已经尝试了一些东西,但不幸的是我无法弄清楚如何将多个博客类别附加到单个 post

BlogPostAPIController.php

public function store(Request $request)
{
    $BlogPosts = new BlogPosts;
    $BlogPosts->tutor_id = $request->user()->tutor->id;
    $BlogPosts->title = $request->title;
    $BlogPosts->BlogCategories = $request->BlogCategories; /* Unknown column*/
    $BlogPosts->slug = str_slug($request->title);
    $BlogPosts->short_description = $request->short_description;
    $BlogPosts->post_content = json_encode($request->post_content);
    $BlogPosts->featured_image = $request->featured_image;
    $BlogPosts->status = $request->status;

    $BlogPosts->BlogCategories()->attach($request->blog_categories_id);
    $BlogPosts->save();

    return $BlogPosts::create($request->all());
}

BlogPostsModel.php

class BlogPosts extends Model{
public $table = 'blog_posts';

const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';

protected $dates = ['deleted_at'];

public $fillable = [
    'tutor_id',
    'title',
    'slug',
    'short_description',
    'post_content',
    'featured_image',
    'status'
];

/**
 * The attributes that should be casted to native types.
 *
 * @var array
 */
protected $casts = [
    'id' => 'integer',
    'tutor_id' => 'integer',
    'title' => 'string',
    'slug' => 'string',
    'short_description' => 'string',
    'post_content' => 'string',
    'featured_image' => 'string',
    'status' => 'string'
];

/**
 * Validation rules
 *
 * @var array
 */
public static $rules = [

];

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 **/
public function tutor()
{
    return $this->belongsTo(\App\Models\Tutor::class);
}

public function BlogCategories(){
    return $this->belongsToMany(BlogCategories::class);
}

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

}

BlogCategoryBlogPost.php

Schema::create('blog_categories_blog_posts', function(Blueprint $table) {
        $table->integer('blog_categories_id')->unsigned();
        $table->integer('blog_posts_id')->unsigned();
        $table->foreign('blog_categories_id')->references('id')->on('blog_categories')->onUpdate('cascade')->onDelete('cascade');
        $table->foreign('blog_posts_id')->references('id')->on('blog_posts')->onUpdate('cascade')->onDelete('cascade');
    });

API响应

Please find the screenshot for API response

  1. 你应该在设置关系之前保存模型,否则模型没有主键(id)来设置关系。
  2. 最好使用 belongsToMany 关系同步(方便更新)。
  3. 您应该 return 保存模型,现在您创建副本并 return 它。
  4. 类别属于 Post 个类别,Post 个类别属于多个类别。

控制器:

public function store(Request $request)
{
    $BlogPosts = new BlogPosts;
    $BlogPosts->tutor_id = $request->user()->tutor->id;
    $BlogPosts->title = $request->title;
    $BlogPosts->slug = str_slug($request->title);
    $BlogPosts->short_description = $request->short_description;
    $BlogPosts->post_content = json_encode($request->post_content);
    $BlogPosts->featured_image = $request->featured_image;
    $BlogPosts->status = $request->status;

    $BlogPosts->save();

    $BlogPosts->BlogCategories()->sync($request->blog_categories_id);

    return $BlogPosts;
}

博客Post的模特:

public function BlogCategories(){
    return $this->belongsToMany(BlogCategories::class, 'blog_categories_blog_posts');
}

BlogCategories 模型:

public function BlogPosts(){
    return $this->belongsToMany(BlogPosts::class, 'blog_categories_blog_posts');
}