簡體   English   中英

如何從 Laravel 嵌套關系中獲取數據?

[英]How to get data from Laravel nested relationship?

我是 Laravel 的新手。 我在 Laravel 中很難建立一個非常嵌套的關系才能正常工作。

想要的行為如下,

我有 5 個模型。 PurchaseInventorySlabScarting和地FloorTile

我在采購模型和庫存模型之間有一對一的關系,而庫存與平板、划痕和地板有進一步的關系。

我有購買ID和希望從中獲取數據inventory表,然后得到一個slab_idscarting_idfloorTile_idinventory表,並從各自的表中獲取數據。

inventory id slab_idslab_idscarting_idfloorTile_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。

如果您的記錄是slab_id而不是slab_ID這樣Laravel會為您做這件事對您來說會更容易,但是您沒有遵循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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM