我试图只获取类别名称,所有文章的index()
函数在Laravel上。所以所有文章和每一篇文章的相关类别。这是一个多对多的关系。
目前为止我做了什么:
foreach($articles as $article) {
if (isset($article)) {
$article['categories'] = $article->category;
}
}
这让我所有的文章与相关的类别作为一个集合,它的工作,但不完全是我想要的。正如我所说,我只想要的类别名称。
我尝试了$article->category->name;
显然也没有工作:$article->category->get('name');
此外,有趣的是,如果我将$article['categories']
重命名为$article['cat']
,我会得到2个集合,该类别包含所有相关的类别对象,另一个完全相同的类别只命名为cat。
我也试探着:
...
$article['categories'] = $this->getcat($articles);
return response()->json($articles, 200);
}
public function getcat($query) {
if (isset($query) && is_countable($query)) {
foreach ($query as &$entity) {
if (!isset($entity)) { continue; }
if (isset($entity->categories)) {
$originObjects = $entity->categories;
$competition_all = [];
foreach($originObjects as $object) {
array_push($competition_all, $object->name);
}
return $competition_all;
}
}
}
这个函数返回我需要的东西,但是它没有在前端以json的形式返回。
1条答案
按热度按时间rhfm7lfc1#
从我所看到的..你的响应是返回
response()->json($names, 200);
,但是你的categories names数组被保存到$article['categories']
数组中。所以..如果你返回response()->json($article, 200);
,你的categories names应该返回为json。$article->category->name;
不工作的原因是因为这是一个带有对象的数组,因为你的关系类型,但是这里你只调用属性。更好的方法是在查询中添加with函数,并将关系作为第一个参数传递,然后在第二个查询中添加anonym函数,并只选择名称。
例如: