2016-09-15 11 views
0

В каком порядке я должен хранить пользовательские отношения, которые сделаны «динамически»?Laravel - Лучший способ сохранить пользователя и его/ее динамически создаваемые отношения при отправке

Под этим я подразумеваю. У меня есть таблица людей с записью husband, например, теперь муж может добавить к нему отношение (hasMany) его жену и детей. Теперь я имею установку модель и она работает

Модель

Эти отношения находятся в той же таблице, данные же для них нужно только знать, если они принадлежат к 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 на сеанс сначала (поместите их в массив) и отправьте, чтобы отправить его на контроллер. Это хороший способ или я должен сделать это по-другому?

(я надеюсь, что я объяснил это хорошо, если не я буду пытаться объяснить это лучше)

ответ

0

Я сделал это, как это я не знаю, если этот способ хорошо, но это работает для меня. Кроме того, чтобы добавить, я только что использовал имя для данных БД, поскольку я хотел, чтобы это работало.

магазин родителя и его/ее дети (если таковые имеются) в БД из сессии

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; 
} 

Remove ребенок с сеанса

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>)

 Смежные вопросы

  • Нет связанных вопросов^_^