【问题标题】:Getting json data to textarea using Laravel Collection HTML使用 Laravel Collection HTML 获取 json 数据到 textarea
【发布时间】:2017-06-02 17:43:48
【问题描述】:

所以我正在使用Forms & HTML 包,我在输出数据时遇到了一些困难。例如:

当我使用这段代码时:

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

我想在这里实现的是列出与文章相关的所有类别。像这样:

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

但是,我不知道如何告诉表单只输出特定的列,所以textarea 填充了 json 数据(包括所有行)。

我知道最好的解决方案是制作一个多重选择器,但在这种情况下 - 我必须使用 textarea。

【问题讨论】:

  • 你能用简单的html标签做,然后用php循环列出所有类别吗?
  • @EddyTheDove 我不能这样做,因为我使用的表单既用于创建资源又用于更新资源。
  • 好的。我明白。但是您仍然可以像现在一样使用该表单,并且只在 textarea 上执行此操作。如果你愿意,我可以给你看一个示例代码。
  • 你确定要一个 textarea 吗?看来你要我多选。
  • @Mihai,通常我更喜欢多重选择器,但在这种情况下,我必须使用 textarea。

标签: php laravel laravel-form


【解决方案1】:

为了使表单字段可以包含在更新表单 (Form::model) 和创建表单 (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` = ?

Paras的结果查询是:

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` = ?

这两个查询都是一样的,但看起来我的查询有点小,所以我会用那个查询。

【讨论】:

  • 在 sql 比较方面做得很好。既然您已经打印了两个查询,我确实认为直接采摘可能会在性能上稍好一些。谢谢你让我知道!这应该是正确答案,点赞
【解决方案2】:

试试这个:

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

将 colName 替换为所需列的名称

【讨论】:

  • 您的文章获取没有意义。首先你选择所需的列,然后你得到它,然后你拔掉它,这是不必要的,然后你获取所有的行。
  • Did you try the command? 首先我只选择一列(以最小化 SQL 输出),然后我获取集合,然后我从集合中提取一个列名(它丢失了键值结构),然后我将其转换为数组(使用 all()),然后我将数组内爆以插入新行。你现在明白了吗?
  • 首先,如果没有 pluck(您说这是不必要的),转换为数组时的集合将采用您不想要的键值形式。其次,我没有获取所有的行,这里的 all() 用于将集合转换为数组。在 get() 阶段调用 all() 之前已经触发了查询
  • 看看我的回答,如果你认为你的解决方案更好,我想请你解释为什么。
  • 两种解决方案实际上是相同的。 select('colName')-&gt;get()-&gt;pluck('colName')-&gt;pluck('colName') 相同,all() 是 toArray 的别名。在性能方面两者完全相同,但我很高兴我的回答帮助您找到了解决方案
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2019-09-16
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多