![](/img/trans.png)
[英]Laravel 5.7: How to recursively get an attribute from a nested Eloquent relationship?
[英]How to get data from Laravel nested relationship?
我是 Laravel 的新手。 我在 Laravel 中很難建立一個非常嵌套的關系才能正常工作。
想要的行為如下,
我有 5 個模型。 Purchase
、 Inventory
、 Slab
、 Scarting
和地FloorTile
。
我在采購模型和庫存模型之間有一對一的關系,而庫存與平板、划痕和地板有進一步的關系。
我有購買ID和希望從中獲取數據inventory
表,然后得到一個slab_id
, scarting_id
或floorTile_id
從inventory
表,並從各自的表中獲取數據。
與inventory id
slab_id
, slab_id
、 scarting_id
和floorTile_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->id
和foreign_key = App\\Slab
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.