Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny][Laravel5] Formularz model relacja wiele do wielu
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Hej, masz Posty i tagi. Posty mogą mieć wiele tagow, tag moze należec do wielu postow.
  1. class Post extends Model {
  2.  
  3. protected $fillable = [
  4. 'title', 'post', 'publish_at'
  5. ];
  6.  
  7. protected $dates = ['publish_at'];
  8.  
  9. public function tags()
  10. {
  11. return $this->belongsToMany('App\Tag');
  12. }
  13.  
  14. }

  1. class Tag extends Model {
  2.  
  3. protected $fillable = [
  4. 'name', 'namelink'
  5. ];
  6.  
  7. public $timestamps = false;
  8.  
  9.  
  10. }


Mam teraz formularz edycji posta:
Kod
{exclamation.gif Form::model($post, ['route'=>['post.update', $post->id], 'method'=>'PATCH', 'class' => 'form-horizontal']) exclamation.gif}
<div class="form-group">
    {exclamation.gif Form::label('post', 'Postaa', array('class' => 'col-sm-2 control-label')) exclamation.gif}
    <div class="col-sm-10">
        {exclamation.gif Form::textarea('post', null, ['class'=>'form-control', 'id'=>'post', 'placeholder'=>'Post']) exclamation.gif}
    </div>
</div>
{exclamation.gif Form::close() exclamation.gif}

Ale chcę do tego dodać jeszcze textarea gdzie po przecinkach czy enterach będą nazwy tagow, ktore ma dany post. Jak to moge zrobić?
Moge to zrobic prymitywnie, czyli w kontrolerze pobrac tagi z posta, połączyc czym chce i wrzucic do widoku, ale kurcze, nie po to mam Modele i zaleznosci by tak robic. Idzie to jakoś zautomatyzowac? Skoro jedne pola form łyka automatycznie, to moze się da by łykał też relacje?
ctom
nie robie takich operacji w View, ale może spróbuj tak:

{{ Form::textarea('tagi', implode(',', $post->tags()->get(['name'])->toArray() ) , ['class'=>'form-control', 'id'=>'tagi', 'placeholder'=>'tagi']) }}
nospor
Ale to sie sprowadza do tego co mowilem, ze nie chce tak wlasnie robic smile.gif
jacobson
mi tam zwykle wystarczało zwykłe tagsinput : http://xoxco.com/projects/code/tagsinput/example.html
nospor
Super, a jak to się ma do mojego pytania?
by_ikar
O ile jeden do jednego zrobić można dość łatwo:

Kod
{!! Form::textarea('Tag[name]', null, ['class'=>'form-control', 'id'=>'post', 'placeholder'=>'Post']) !!}


O tyle nie jestem pewien czy tak łatwo to będzie wyglądać w przypadku jeden do wielu.. Musiałbyś stworzyć swoją metodę (accessor) i sprawdzić czy się do niej dostaniesz poprzez Model[metoda] o ile to zadziała i samo ci się wypełni (chociaż mam pewne wątpliwości), to nie wiem czy samo dodanie mutatora odpowiednio ci zapisze dane dla relacji.

PS. wyłączaj emotki przy dodawaniu posta z kodem widoku blade ;)
nospor
Tak, jeden to i ja znalazlem bez problemu smile.gif

ad ps: hehe smile.gif
ctom
@nospor tak z ciekawości ... dałeś redę to bardziej "zautomatyzować" ?
nospor
Dodalem do modelu metode toInput() i ona zwraca mi tekst, czyli rekordy oddzielone przecinkami, i to wkladam jako wartosc textarea
ctom
bardziej liczyłem, że zdradzisz jak działasz w druga stronę wink.gif
nospor
Za bardzo nie ma co tu zdradzac. Formem dostaje tekst oddzielony przecinkami, robijam go wiec na tablice po przecinkach, znajduje w bazie IDki odpowiadajace każdemu tekstowi (a gdy nie ma to tworze nowy ) (findOrCreateNew). Mając IDki zapisuje relace metodą modelu sync()
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.