Php 使用Laravel集合HTML将json数据获取到textarea

Php 使用Laravel集合HTML将json数据获取到textarea,php,laravel,laravel-form,Php,Laravel,Laravel Form,所以我在使用这个包,在输出数据时遇到了一些困难。例如: 当我使用此代码时: {!! Form::model($article) !!} {!! Form::textarea('categories', null) !!} {!! Form::close() !!} 我想在这里实现的是列出与本文相关的所有类别。像这样: <textarea name="categories"> Cat1 Cat2 Cat5 </textarea> 第一类

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

当我使用此代码时:

{!! Form::model($article) !!}
    {!! Form::textarea('categories', null) !!}
{!! Form::close() !!}
我想在这里实现的是列出与本文相关的所有类别。像这样:

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

第一类
第二类
第五类
但是,我不知道如何告诉表单只输出一个特定的列,因此发生的情况是
textarea
中填充了json数据(包括所有行)

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

尝试以下方法:

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

将colName替换为您想要的列的名称

为了使表单字段既可以包含在更新表单(
form::model
)中,也可以包含在创建表单(
form::open
)中,我做了如下操作:

{!! Form::textarea('categories', isset($article) ? implode(PHP_EOL, $article->categories()->pluck('name')->toArray()) : null)
我在那里做的是首先检查
$article
是否存在。如果是,则表示我使用了
表单::model
。当
$article
存在时,我以数组的形式检索类别列表,并在
PHP\u EOL
(“\n”)中内爆

但是如果没有
$article
,这意味着表单应该是创建表单,因此数据将为空

多亏了段落,我想出了这个解决方案。但即使我们的结果是相同的,对这些结果的查询也是不同的

我的查询结果是:

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

这两个查询都是相同的,但看起来我的查询稍微小了一点,所以我将使用该查询。

您可以使用简单的html标记,然后使用php循环列出所有类别吗?@EddyTheDove我不能这样做,因为我使用的表单用于创建和更新资源。好的。我理解。但是您仍然可以像现在一样使用表单,并且只能在文本区域中使用。如果你愿意,我可以给你看一个示例代码。你确定要一个textarea吗?对我来说,你似乎想要一个multiple select。@Mihai,通常我更喜欢multiple selector,但在这种情况下,我必须使用textarea。你的文章获取没有意义。首先选择所需的列,然后获取该列,然后提取该列,这是不必要的,然后提取所有行。
是否尝试了该命令?
首先我只选择一列(以最小化SQL输出),然后获取集合,然后从集合中提取列名(它会丢失键值结构),然后我将其转换为一个数组(使用all()),然后我将该数组内爆以进行新行插入。你现在明白了吗?首先,如果没有Pull(你说这是不必要的),当集合转换成数组时,它将以你不想要的键值形式出现。其次,我不获取所有行,这里的all()用于将集合转换为数组。在get()阶段调用all()之前,已经触发了查询。在我的回答中,如果您认为您的解决方案更好,我希望您解释原因。两种解决方案实际上是相同的
select('colName')->get()->pull('colName')
->pull('colName')
相同,all()是toArray的别名。就性能而言,两者完全相同,但我很高兴我的回答帮助您找到了一个解决方案在sql比较方面做得很好。既然您已经打印了这两个查询,我确实认为直接提取可能会稍微好一点。谢谢你让我知道!这应该是正确的答案