Laravel (API): мне нужно вставить пост с категориями Multiple Blog с помощью API Request (React) - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь создать функционал для поста в блоге, который предполагается добавить с помощью фронтального приложения, основанного на реакции, и моего API, который построен на Laravel (5.6),

Я пробовал несколько вещей, но, к сожалению, я не могу понять, как я могу прикрепить несколько категорий блогов к одному сообщению

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

Пожалуйста, найдите скриншот для ответа API

1 Ответ

0 голосов
/ 21 декабря 2018
  1. Вы должны сохранить модель перед установкой отношений, в противном случае модель не имеет первичного ключа (id) для установки отношений.
  2. Лучше использовать синхронизацию с отношениями ownToMany (удобно обновлять).
  3. Вы должны вернуть сохраненную модель, теперь вы создаете дубликат и возвращаете его.
  4. Категория принадлежит многим сообщениям, а публикация принадлежит темным категориям.

Контроллер:

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;
}

Модель BlogPosts:

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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...