Так что я пытаюсь создать функцию для пользователей, чтобы добавить несколько категорий при создании сообщения.Laravel - позволяет пользователям вставлять категории после создания сообщения и создавать новые, если они не существуют
Это пример строки получение передается в контроллер:
$request['categories'] = "Sports, Football, Finals";
- Первое, что мне нужно сделать, это разделить строку, очистить его от blankspaces и создать массив.
- Затем проверьте каждую категорию, если она существует, в противном случае создайте новую. Метод Laravel firstOrCreate() может быть хорошо подходит для этого.
- Наконец-то возможность связывать несколько категорий для каждого сообщения.
Это то, что я до сих пор:
ТАБЛИЦЫ
сообщения
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('title');
$table->text('body');
$table->integer('user_id');
});
категории
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('name');
});
category_post
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');
});
Модели
сообщение
class Post extends Model
{
public function categories()
{
return $this->hasMany('App\Category');
}
}
Категория
class Category extends Model
{
public function post()
{
return $this->belongsToMany('App\Post');
}
}
Я не знаю, если я настроил таблицы правильно, если я сделал правильную модель отношения и Я чувствую себя не знаю, как настроить контроллер.
Я получил вдохновение от этих постов:
- How to insert a post with multi category and with multi column deferent category in laravel?
- https://laracasts.com/discuss/channels/general-discussion/eloquent-attach-method-for-multiple-inserts-into-a-pivot-table
Выглядит хорошо, но я получить ошибку 'MassAssignmentException в строке Model.php 452: имя в Model.php line 452 в Model-> fill (array ('name' => 'test')) в Model.php line 288 на Model- > __ construct (array ('name' => 'test')) в Model.php line 504 ... ' –
О, просто добавьте следующую строку в свою модель' Category': 'protected $ fillable = ['name'];' – Paras
Хмм, теперь я получаю сообщение об ошибке 'Call to undefined method Illuminate \ Database \ Query \ Builder :: attach() ' Это моя категория: ' Php 10 namespace App; использование Illuminate \ Database \ Eloquent \ Model; Категория Категория extends Модель { Публичные сообщения функций() { return $ this-> принадлежитToMany ('App \ Post'); } protected $ fillable = ['name']; } ' Почтовая модель: ' Php namespace App; использование Illuminate \ Database \ Eloquent \ Model; класс Post расширяет модель { \t общественности категории функций() \t { \t \t возвращение $ this-> belongsToMany ('App \ Категория'); \t} } ' –