首先,我很抱歉如果问题已解决。我读了很多类似的文章,但对于我的情况却不是很正确。 我正在Laravel 5.8中建立一个简单的项目。我想创建一个简单的书店,我需要一本书有多位作者,因此每个书名后面是作者,或者作者(如果有的话)后面是逗号,最后一个是单词“与”。
我已经建立了两个模型,“作者”和“书本”,以及它们各自的表,以及数据透视表,因为它们之间的关系属于belongsToMany。一切都像魅力一样,我得到了预期的结果。但是,我无法根据需要设置结果的格式。对于多位作者,最后我总是得到一个逗号。由于我无法正确使用逗号,因此在最后一位作者的情况下,我还没有尝试添加最后一个“和”。 对于单个作者,解决方案很简单,我只使用条件式。 但是,在有多位作者的情况下,事情变得复杂了。 解决类似问题的最流行方法是以各种类似方式使用implode()。这种方法的问题在于,由于Eloquent正在使用其内部逻辑来执行查询,因此当我遍历“书”时,没有作者列,仅是对数据透视表的引用。此外,作者的名字和姓氏在不同的列中。因此,当我尝试通过获取相应数据手动创建“ implodable()”数组时,由于每个名称都由名字和有神论者的名字组成,因此项目大小将增加一倍。最重要的是,整个过程在一个双循环中运行,这对我来说使事情变得更加复杂。 我敢肯定有一个简单的方法可以解决这个问题。
这是到目前为止我的刀片服务器代码的示例。当然,解决问题时应相应地重新排列条件,以实现“和”情况:
<ul>
@foreach ($books as $book)
<li>{{ $book->title }} by
@if (count($book->author) == 1)
@foreach ($book->author as $name)
{{ $name->last_name }}
{{ $name->first_name }}
@endforeach
@else
@foreach ($book->author as $name)
{{ $name->last_name }}
{{ $name->first_name }}
{{-如果还有其他名称,请在此处打印逗号,如果最后一个名称则用'and'。问题似乎需要有条件地解决,但是如何解决呢? -}}
@endforeach
@endif
</li>
@endforeach
</ul>
答案 0 :(得分:0)
for x in range(len(SageResult)):
SOPOrderReturnID=SageResult[x]
。@if (count($book->author) == 1)
关闭条件之前,您不能使用@else
。@endif
的结构错误,请改用@else
。@elseif
的foreach内进行。答案 1 :(得分:0)
只需显示li {
display: inline-block;
}
ul {
list-style: none;
}
,根据您的实际结果,您就不需要再进行复杂的检查。
implode(', ', $book->author)
答案 2 :(得分:0)
如果不需要“和”机制,则用逗号implode
可以解决问题。对于“和”机制,请使用以下代码:
<ul>
@foreach ($books as $book)
<li>{{ $book->title }} by
@for ($i = 0; $i < count($book->author); $i++)
{{ $book->author[$i]->last_name }}
{{ $book->author[$i]->first_name }}
@if ($i == count($book->author) - 2)
and
@endif
@if ($i < count($book->author) - 2)
,
@endif
@endfor
</li>
@endforeach
</ul>
在不使它们彼此链接的必要之处添加了非空格