我应该以哪种方式存储“动态”制作的用户关系?
我的意思是。例如,现在丈夫可以添加与他(hasMany)他的妻子和孩子的关系,我有人表,记录为husband
。现在我已经设置了模型并且它可以正常工作
型号
这种关系在同一个表中,因为数据对他们来说是相同的我只需要知道它们是否属于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
首先保存到Session(将它们放在数组中)并提交以将其发布到控制器。这是一个好方法还是应该以其他方式做到?
(我希望我解释得很好,如果不是,我会尝试更好地解释它)
答案 0 :(得分:0)
我这样做了我不知道这种方式是否合适但它对我有用。另外要添加我刚刚使用DB数据的名称,因为我想让它工作。
将父母及其子女(如果有)存储在会话
中的数据库中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 强>
将儿童添加到会话
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;
}
从会话中移除儿童
public function delete(Request $request, $id) {
$temp = $request->session()->pull('children');
unset($temp[$id]);
$request->session()->put('children', $temp);
return 1;
}
在视图创建(如果有)
的会话中加载子项public function load(Request $request) //get children from session (if exists)
{
$data = $request->session()->get('children');
if($data != null){
return $data;
}
else {
return 0;
}
}
清除会话中的所有儿童
public function clear(Request $request) //remove children from session
{
$request->session()->forget('children');
return 1;
}
使用数据表单控制器,您可以更新视图(在我的情况下,将<li>
添加到<ul>
元素)