2017-08-07 135 views
0

我想用Laravel响应JSON,我有CategoryModel属于SongModel。Laravel 5.4如何用关系响应JSON?

这是我CategoryModel

class CategoryModel extends Model 
{ 
    protected $table = 'categories'; 
    protected $fillable = [ 
     'id', 
     'name', 
    ]; 

    public function song() 
    { 
     return $this->hasMany(SongModel::class); 
    } 
} 

这是我SongModel

class SongModel extends Model 
{ 
    protected $table = 'songs'; 
    protected $fillable = [ 
     'id', 
     'name', 
     'url', 
     'categories_id', 
     'singers_id', 
     'types_id', 
    ]; 

    public function category() 
    { 
     return $this->belongsTo(CategoryModel::class); 
    } 
} 

我要回应JSON与关系。我写道:

class SongController extends Controller 
{ 
    public function index(SongModel $songModel) 
    { 
     $song = $songModel->category()->get(); 
     return response()->json(["DATA" => $song], 201); 
    } 
} 

回答

1

试试这个。 return response()->json(["DATA" => $songModel->load('category')->toArray()], 201);

+0

这说明我这个样子:{ “DATA”:{ “类别”:空 }} – Vichit

+0

@Vichit哦,我明白了。也许在你的控制器中'$ songModel'为空,所以它在响应中返回null。 –

+0

我认为你的代码路由模型绑定定义不正确。 –

2

要做到这一点,你只需要加载的关系返回响应之前:

public function index(SongModel $songModel) 
{ 
    $songModel->load('category'); 

    return response()->json(["DATA" => $songModel], 201); 
} 

https://laravel.com/docs/5.4/eloquent-relationships#lazy-eager-loading

希望这有助于!

+0

它显示我那个类别为空。 {“DATA”:{“category”:null}} – Vichit

+0

@Vichit对不起,我并不打算将负载分配给'song'。我已经更新了我的答案。 –

+0

它告诉我:{ “DATA”:{ “类别”:空}}再次 – Vichit

0

OR,您可以使用with('song')

lass SongController extends Controller 
{ 
    public function index(SongModel $songModel) 
    { 
     $song = $songModel::with('song')->get(); 
     return response()->json(["DATA" => $song], 201); 
    } 
} 
+0

非常感谢你的回答:D – Vichit

+0

@Vichit它是否与你一起工作? – adwairi

+0

是的,它的工作现在。 – Vichit