Eloquent laravel:获取表中所有关系的JSON表示

问题描述 投票:2回答:2

型号Ov.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Ov extends Model 
{

    protected $table = 'ov';
    public $timestamps = true;
    protected $fillable = array('version', 'macAddress');
    protected $hidden = array('timestamps');

    public function masters()
    {
        return $this->hasMany('App\Models\MasterEquipment', 'id_ov_foreign_key');
    }

}

型号MasterEquipment.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class MasterEquipment extends Model 
{

    protected $table = 'masterEquipment';
    public $timestamps = true;
    protected $fillable = array('macAddress');

    public function slaveEquipments()
    {
        return $this->hasMany('App\Models\SlaveEquipment', 'id_masterEquipment_foreign_key');
    }

    public function equipment()
    {
        return $this->hasOne('App\Models\Equipment', 'id_masterEquipment_foreign_key');
    }

}

我想检索给定版本的OV的整个JSON表示:我试过:

return Ov::where('version', '3')->with('masters')->get();

但它不起作用,我只得到以下JSON :(主人空)

{
   "version": 3,
   "macAddress": "00:01:02:04:04",
   "masters":[]
}

请问你能帮帮我吗 ?

php json laravel laravel-5 eloquent
2个回答
0
投票

你需要使用Eloquent Resources

这很简单。您将返回资源并将模型传递到资源集合,而不是返回模型,如下所示:

return new OvCollection(Ov::where('version', '3')->with('masters')->get());

首先,您必须首先创建资源集合。


0
投票

您的关系构建器是错误的。从你的模型我得出结论,你的两个表是这样的

ov表

------------------------------
id   |  version  | macAddress
------------------------------

masterEquipment表

---------------------
id   |  macAddress
---------------------

只有与两个表相关的事情是macAddress

所以你的模态关系应该是这样的

Ov资本

 public function masters()
    {
        return $this->hasMany(MasterEquipment:class, 'macAddress','macAddress);
    }

然后只有这将工作

return Ov::where('version', '3')->with('masters')->get();
© www.soinside.com 2019 - 2024. All rights reserved.