如何从Laravel嵌套关系中获取数据?

时间:2019-05-02 14:57:21

标签: php laravel eloquent relationship

我是Laravel的新手。在laravel中建立一个非常嵌套的关系以正常工作时,我遇到很多麻烦。

想要的行为如下,

我有5个模特。 PurchaseInventorySlabScartingFloorTile

我在采购模型和库存模型之间存在一对一的关系,而库存与板坯,疤痕和地板砖之间又有进一步的关系。

我有购买ID,想从inventory表中获取数据,然后从slab_id表中获取scarting_idfloorTile_idinventory并获取数据从各自的表中。

slab_idscarting_idfloorTile_idinventory id可以是多个。

我不知道如何在每次迭代中获取数据。

购买模型:

<?php

namespace App;
use App\Inventory;

use Illuminate\Database\Eloquent\Model;

class Purchase extends Model
{
    public function inventory()
    {
        return $this->hasOne('App\Inventory');
    }

}

库存模型:

<?php

namespace App;
use App\Slab;
use App\Scarting;
use App\FloorTile;
use App\Purchase;
Use App\StandardSize;

use Illuminate\Database\Eloquent\Model;

class Inventory extends Model
{
    public function purchase()
    {
        return $this->belongsTo('App\Purchase');
    }

    public function standatdSize()
    {
        return $this->hasOne('App\StandardSize');
    }

    public function slab()
    {
        return $this->hasOne('App\Slab');
    }

    public function scarting()
    {
        return $this->hasOne('App\Scarting');
    }

    public function floorTile()
    {
        return $this->hasOne('App\FloorTile');
    }
}

我已经尝试过了:

$purchase = Purchase::where('factoryName', $factoryName)->with('inventory.slab')->get();

结果如下:

{
  "id": 36,
  "fname": "Sama",
  "lname": "Jojo",
  "factoryName": "Sama Inc.",
  "cnic": "3216542",
  "area": "Johar town",
  "city": "Lahore",
  "province": "Punjab",
  "phone1": "45678912345",
  "phone2": "45678912345",
  "inventory_ID": 10,
  "created_at": "2019-03-19 12:11:45",
  "updated_at": "2019-03-19 12:11:45",
  "inventory": {
    "id": 10,
    "purchase_id": 36,
    "marbleType": "1",
    "totalSquareFt": 25,
    "priceperSquareFt": 230,
    "totalPurchasePrice": 25000,
    "standardSize_ID": "5",
    "salePrice": 250,
    "miliMeter": "6mm",
    "slab_ID": 1,
    "scarting_ID": null,
    "floorTile_ID": null,
    "created_at": "2019-03-19 12:11:45",
    "updated_at": "2019-03-19 12:11:45",
    "slab": null
  }
}

即使有针对平板的数据,但仍然显示NULL。

1 个答案:

答案 0 :(得分:1)

如果您的记录是slab_id而不是slab_IDLaravel会为您方便,但是您没有遵循Laravel的命名约定,这很好,但是您必须告诉Laravel您正在使用自己的命名约定,它将很好地使用它。我在下面提供了一个示例。

public function slab()
{
    return $this->hasOne('App\Slab', 'id', 'slab_ID');
}

$this->hasOne('App\Model', 'foreign_key', 'local_key');

外键是您尝试检索的模型的主键,而local_key是此模型中调用的引用,通常为model_id,在这种情况下为slab_ID

local_key = $this->idforeign_key = App\Slab