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>
元素)
我应该用什么方式来存储创建的用户关系"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>
元素)