Laravel Eloquent:从2个表中获取JSON数据

时间:2019-06-14 19:56:06

标签: laravel eloquent

我有2张桌子

  • 节日
  • festival_image

如下所示: Tables 我想通过Eloquent从表中获取如下所示的JSON数据。

[
    {
        “id”: 1,
        “name”: “festival name 1”,
        “url”: [
            “https://picsum.photos/480/480/?image=51”,
            “https://picsum.photos/480/480/?image=52”,
            “https://picsum.photos/480/480/?image=53”
        ]
    },
    {
        “id”: 2,
        “name”: “festival name 2”,
        “url”: [
            “https://picsum.photos/480/480/?image=54”,
            “https://picsum.photos/480/480/?image=55”,
            “https://picsum.photos/480/480/?image=56”
        ]
    }
]

有人可以告诉我如何在Laravel 5.7中做到这一点吗?

这是FestivalController.php

class FestivalController extends Controller{
    public function getFestivals(){
        //I want to know how to do...
        return $festivals->toJson();
    }
}

2 个答案:

答案 0 :(得分:1)

首先,在节日模型中,您需要定义Festival_image之间的关系。

“节日模式”

public function festival_image()
    {
        return $this->HasMany('App\YourModalName', 'id', 'festival_id');
    }

然后在您的控制器上 您将其称为模型节,您将看到它将具有Festival_image。 像这样

$festival = App\YourModalName::all();

$image = $festival->festival_image();

return $image

然后您可以只return,您将得到laravel照顾将其转换为JSON。 或者,您可以

return response()->json($image);

更多-在这里阅读。

https://laravel.com/docs/5.8/eloquent-relationships#has-many-through

答案 1 :(得分:1)

首先,我假设您已经定义了Festival和Festival_images之间的关系。

只是为了澄清:

节日模型:

  

请更改您的节日图像模型的名称:

use App\Models\FestivalImage;

public function festivalImages()
{
   return $this->hasMany(FestivalImage::class);
}

然后使用您的getFestivals控制器方法

public function getFestivals(){

     $festivals = Festival::with('festival_image')->get();

     $festivals = $festivals->map(function($f){

     $festival =  [
           "id" => $f->id,
            "name" => $f->name,
            "urls" => $f->festivalImages->toArray() ,
     ];

     return $festival;

     });

     return $festivals->toJson();
}