2017-10-09 74 views
1

我有新闻文章,我想将特定字段传递给JSON。Laravel用JSON和循环的雄辩

我试图循环使用此代码的所有消息:

public function appNews() { 
    $news = News::orderBy('id', 'desc')->get(); 

    foreach($news as $newsOne) { 
    $title = $newsOne->title; 
    $body = $newsOne->body; 
    $image = $newsOne->image; 


    return response()->json([ 
     'title' => $title, 
     'body' => $body, 
     'image' => $image 
    ]); 

    } 
} 

但这返回一个结果,而不是多个。

如果我赞同环路我得到的所有与此代码所需要的结果:

public function appNews() { 
    $news = News::orderBy('id', 'desc')->get(); 

    foreach($news as $newsOne) { 
    $title = $newsOne->title; 
    $body = strip_tags($newsOne->body); 
    $image = $newsOne->image; 

    echo '<div>' . $newsOne->title . '</div>'; 

    /*return response()->json([ 
     'title' => $title, 
     'body' => $body, 
     'image' => $image 
    ]);*/ 

    } 
} 

我怎么能修复与响应() - > JSON(),这样我就可以得到所有的结果吗?

回答

2

使一个数组,并追加其

public function appNews() { 
    $news = News::orderBy('id', 'desc')->get(); 
    $array = []; 
    foreach($news as $newsOne) { 
    $title = $newsOne->title; 
    $body = strip_tags($newsOne->body); 
    $image = $newsOne->image; 

    $array[] = [ 
     'title' => $title, 
     'body' => $body, 
     'image' => $image 
    ]; 

    } 

    return response()->json($array); 
} 
+0

精彩!非常感谢你。我会在几分钟内接受你的答案。 – satvision83

2

假设您的实际代码看起来像这样,最好的办法是可能:

// here you select only fields you need 
$news = News::select('title', 'body', 'image')->orderBy('id', 'desc')->get(); 

// here you return changed content of body by striping tags 
return response()->json($news->map(function($singleNews) { 
    $singleNews->body = strip_tags($singleNews->body); 
    return $singleNews; 
})->all());