2017-01-18 7 views
2

Forms & HTMLパッケージを使用しています。データを出力する際に​​いくつかの問題があります。たとえば:Laravel Collectionを使用してjsonデータをテキストエリアに取得する

私はこのコードを使用:

{!! Form::model($article) !!} 
    {!! Form::textarea('categories', null) !!} 
{!! Form::close() !!} 

は、私がここに達成したい何を、記事が関連するカテゴリのすべてを一覧表示することです。このように:

<textarea name="categories"> 
    Cat1 
    Cat2 
    Cat5 
</textarea> 

しかし、私は出力にのみ特定の列をフォームを伝えることができる方法を知っているので、何が起こるかtextareaは(すべての行を含む)JSONデータで満たされていることですしていません。

私は最高の解決策は、複数のセレクタを作成することですが、この場合は - 私はtextareaを使用する必要があります知っている。

+0

単純なhtmlタグで行い、PHPでループしてすべてのカテゴリを表示できますか? – EddyTheDove

+0

@EddyTheDove私が使用しているフォームは、リソースの作成と更新の両方に使用されているため、できません。 –

+0

わかりました。しかし、あなたは今使っているようにフォームを使用することができ、テキストエリアでのみ行うことができます。あなたが望むなら、サンプルコードを表示することができます。 – EddyTheDove

答えて

1

これを試してみてください:

{!! Form::textarea('categories', implode('\n', $article->categories()->select('colName') 
     ->get()->pluck('colName')->all()) !!} 

更新フォーム(Form::model)にして作成する形態の両方で含まれると、フォームフィールドを利用できるようにするにしたい列

+0

あなたの記事の取得は意味がありません。最初にあなたが望む列を選択してから、それを取得し、その後、それをプルします。これは不要です。そして、すべての行をフェッチします。 –

+0

'コマンドを試しましたか?'最初に(SQLの出力を最小限に抑えるために)1つの列だけを選択してからコレクションを取得し、コレクションから列名を抜き(キー値構造を失った) )、その後、私は新しい行の挿入のために配列をimplodeします。あなたは今理解していますか? – Paras

+0

最初に、抜粋(あなたが言うことは不要です)がなくても、配列に変換されたコレクションは、あなたが望ましくないキー値形式になります。次に、すべての行をフェッチしないで、all()を使用してコレクションを配列に変換します。クエリはすでにget()ステージでall()を呼び出す前に起動されています – Paras

1

の名前でcolNameにを置き換え(Form::open)、私はこのようなものでした:私はそこにいた何

{!! Form::textarea('categories', isset($article) ? implode(PHP_EOL, $article->categories()->pluck('name')->toArray()) : null) 

は、最初$articleが存在する場合はチェックしていました。もしそうなら、それは私がForm::modelを使ったことを意味します。 $articleが存在する場合は、カテゴリのリストを配列として取り出し、PHP_EOL( "\ n")に埋め込みます。

しかし、$articleがない場合は、フォームが作成フォームであると考えられるため、データは空になります。

私はParasのおかげでこのソリューションを考え出しました。しかし、私たちの結果は同じですが、これらの結果に対するクエリは異なります。

マイ結果クエリは:

select `display_name` from `categories` inner join `article_categories` on `categories`.`id` = `article_categories`.`category_id` where `article_categories`.`article_id` = ? 

パラス結果のクエリは次のとおりです。クエリの両方が同じである

select `display_name`, `article_categories`.`article_id` as `pivot_article_id`, `article_categories`.`category_id` as `pivot_category_id` from `categories` inner join `article_categories` on `categories`.`id` = `article_categories`.`category_id` where `article_categories`.`article_id` = ? 

が、私のクエリは少し小さいように見えたので、私その質問に行くよ。

+0

SQL比較でうまく動作します。これで両方のクエリが表示されたので、直接の抜粋がパフォーマンスがやや向上していると思います。知らせてくれてありがとうございます!これは正しい答え、upvoting – Paras

+0

@パラースありがとう、非常に感謝:) –

関連する問題