Laravel - 存储用户和 his/her 提交时动态创建关系的最佳方式

Laravel - Best way to store user and his/her dynamically created relations on submit

我应该用什么方式来存储创建的用户关系"Dynamically"?

我的意思是。例如,我有 table 记录 husband 的人,现在丈夫可以将他的妻子和 children 添加为与他 (hasMany) 的关系。现在我已经设置了模型并且它可以工作

型号

这个关系是相同的 table 因为它们的数据是相同的 我只需要知道它们是否属于 husband

public function children(){
   return $this->hasMany( get_class($this) ,'people_id','id');        
}
public function parent(){     
   return $this->belongsTo( get_class($this) , 'people_id','id');
}

现在,当我去表格并在那里添加一个人时 husband。我可以选择动态添加他的 children()(他的妻子、他的 children、他的祖母...)并在完成后提交。

现在我很难将这些 children 保存到 Session 中(将它们放入数组中),然后将其提交给 post 到控制器。这是一个好方法还是我应该用其他方法来做?

(我希望我解释得很好,如果没有我会尽力解释得更好)

我已经这样做了,我不知道这种方式是否可以,但它对我有用。另外要补充的是,我刚刚使用了数据库数据的名称,因为我想让它起作用。

将 parent 和 his/her children(如果有)存储在来自 Session

的数据库中
public function store(AdminCreatePersonRequest $request) 
{

 $data = $request->all();

 $parent =  new Person;

 $parent->name = $data['name'];

 $parent->save();

 $children = $request->session()->pull('children');


 if ($children != null) {

    foreach($children as $childData){

        $child = new Person(['name' => $childData['child-name']]);
        $parent->children()->save($child);

    }
 }

return redirect('dashboard')->with('success', ['The user was successfully created']);

}

AJAX

将 child 添加到会话

public function add(AdminCreatePersonChildRequest $request) 
{
    $temp = $request->session()->get('children',[]); 

    $data = $request->all(); 

    unset($data['_token']); 

    array_push($temp,$data); 

    end($temp); 

    $key = key($temp); 

    $data += ['id' => $key]; 

    $request->session()->put('children', $temp); 

    return $data;
}

从会话中删除 child

 public function delete(Request $request, $id) {

        $temp = $request->session()->pull('children');
        unset($temp[$id]);
        $request->session()->put('children', $temp);

        return 1;

 }  

在视图创建时从会话加载 children(如果有)

public function load(Request $request) //get children from session (if exists)
{
    $data = $request->session()->get('children');
    if($data != null){
        return $data;
    }

    else {
        return 0;
    }
}

清除会话中的所有 children

public function clear(Request $request) //remove children from session
{
   $request->session()->forget('children');

   return 1;
}

并使用数据表单控制器更新视图(在我的例子中,将 <li> 添加到 <ul> 元素)