2017-10-09 71 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());