Как сохранить массив идентификаторов в сводной таблице? - PullRequest
0 голосов
/ 22 января 2020

У меня есть эта категория с его детьми в этом массиве:

enter image description here

Теперь у меня есть три таблицы, которые сначала называются categories, затем children и, в-третьих, сводная таблица с именем category_child между первой и второй таблицами

. В связи с моей проблемой мне нужно сохранить category_name (на рисунке выше) в таблице categories, затем сохранить child_name в children Таблица, наконец, хранить идентификатор category_name и идентификаторы category_name в category_child

в модели категории:

public function children()
{
    return $this->belongsToMany('App\Models\Child')->withTimestamps();
}

в дочерней модели:

  public function category()
{
    return $this->belongsToMany('App\Models\Category')->withTimestamps();
}

код моего контроллера:

   $category = Category::create([
        'category_name' => $request->category_name,
    ]);

    foreach($request->child_name as $child){

        Child::create([
            'child_name' => $child,
        ]);
    }

    $category->children()->attach($child);

    return redirect()->back();

проблема по этой ссылке $category->children()->attach($child);

Как сохранить идентификаторы children, добавленные в сводную таблицу

Ответы [ 2 ]

1 голос
/ 23 января 2020

Я думаю, что вы пропустили множество отношений, так как ребенок не может принадлежать многим родителям! У каждого ребенка будет один родитель, поэтому в этой категории должно быть много детей, но каждый ребенок должен принадлежать к одной категории. Я так думаю.

В любом случае, попробуйте это:


    $category = Category::create([
        'category_name' => $request->category_name,
    ]);

    $children_id = [];

    foreach($request->child_name as $child){

        $children_id[] = Child::create([ 'child_name' => $child ])->id;
    }

    $category->children()->attach($children_id);

0 голосов
/ 23 января 2020

Вам не нужно сохранять children в сводной таблице напрямую, это следует делать автоматически, если вы храните его в детской таблице и имеете к нему правильное отношение.

Вам необходимо создать сводная таблица. Метод миграции может выглядеть примерно так:

public function up()
{
    Schema::create('category_child', function (Blueprint $table) {
        $table->unsignedInteger('category_id');
        $table->unsignedInteger('child_id');
        $table->foreign('category_id')->references('id')->on('category')->onDelete('cascade');
        $table->foreign('child_id')->references('id')->on('child')->onDelete('cascade');
    });
}

Ваши модели должны иметь следующие отношения:

class Category extends Model
{
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

class User extends Model
{
    public function categories()
    {
        return $this->belongsToMany('App\Category');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...