型号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":[]
}
请问你能帮帮我吗 ?
你需要使用Eloquent Resources。
这很简单。您将返回资源并将模型传递到资源集合,而不是返回模型,如下所示:
return new OvCollection(Ov::where('version', '3')->with('masters')->get());
首先,您必须首先创建资源集合。
您的关系构建器是错误的。从你的模型我得出结论,你的两个表是这样的
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();