Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inny][Laravel5] Formularz model relacja wiele do wielu
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
{(IMG:style_emoticons/default/exclamation.gif) Form::model($post, ['route'=>['post.update', $post->id], 'method'=>'PATCH', 'class' => 'form-horizontal']) (IMG:style_emoticons/default/exclamation.gif) }
<div class="form-group">
    {(IMG:style_emoticons/default/exclamation.gif) Form::label('post', 'Postaa', array('class' => 'col-sm-2 control-label')) (IMG:style_emoticons/default/exclamation.gif) }
    <div class="col-sm-10">
        {(IMG:style_emoticons/default/exclamation.gif) Form::textarea('post', null, ['class'=>'form-control', 'id'=>'post', 'placeholder'=>'Post']) (IMG:style_emoticons/default/exclamation.gif) }
    </div>
</div>
{(IMG:style_emoticons/default/exclamation.gif) Form::close() (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
ctom
post
Post #2





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


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']) }}

Ten post edytował ctom 7.04.2015, 13:07:38
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Ale to sie sprowadza do tego co mowilem, ze nie chce tak wlasnie robic (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
jacobson
post
Post #4





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

Ostrzeżenie: (0%)
-----


mi tam zwykle wystarczało zwykłe tagsinput : http://xoxco.com/projects/code/tagsinput/example.html
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Super, a jak to się ma do mojego pytania?
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował by_ikar 7.04.2015, 16:54:09
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Tak, jeden to i ja znalazlem bez problemu (IMG:style_emoticons/default/smile.gif)

ad ps: hehe (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ctom
post
Post #8





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


@nospor tak z ciekawości ... dałeś redę to bardziej "zautomatyzować" ?
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Dodalem do modelu metode toInput() i ona zwraca mi tekst, czyli rekordy oddzielone przecinkami, i to wkladam jako wartosc textarea
Go to the top of the page
+Quote Post
ctom
post
Post #10





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


bardziej liczyłem, że zdradzisz jak działasz w druga stronę (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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()
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 18:40