【问题标题】:Eloquent laravel : Get JSON representation of entry in table with all his relations雄辩的 laravel :获取表中条目的 JSON 表示及其所有关系
【发布时间】:2017-11-09 01:19:13
【问题描述】:

模型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:(masters为空)

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

你能帮帮我吗?

【问题讨论】:

  • 看到这个document,它的帮助已满
  • 请将OvMasterEquipment 的数据库方案添加到您的问题中。 hasmany() 的反义词应该是 belongsTo() 而不是 hasOne()
  • 这两个表的主键列名是什么?
  • @Björn 当我创建 hasMany 关系时,是否必须在另一个模型中添加 belongsTo() 关系?
  • @wawanopoulos:不,不是。您应该将表模式添加到问题帖子中,以便人们解决您遇到的错误。

标签: php json laravel laravel-5 eloquent


【解决方案1】:

您需要为此使用Eloquent Resources

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

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

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

【讨论】:

    【解决方案2】:

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

    ov 表

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

    ma​​sterEquipment 表

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

    唯一与这两个表相关的是macAddress

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

    Ov 模态

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

    只有这样才行

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

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 2016-07-22
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2018-08-31
      • 2017-04-14
      相关资源
      最近更新 更多