Я новичок в Laravel. У меня много проблем с установлением очень вложенных отношений для правильной работы в laravel.
Требуемое поведение выглядит следующим образом:
У меня есть 5 моделей. Purchase
, Inventory
, Slab
, Scarting
и FloorTile
.
У меня есть отношение один к одному между моделями покупки и инвентаризации, в то время как запасы дополнительно связаны с плитой, вырубкой и плиткой.
У меня есть идентификатор покупки, и я хочу получить данные из таблицы inventory
, затем получить slab_id
, scarting_id
или floorTile_id
из таблицы inventory
и получить данные из соответствующей таблицы.
slab_id
, scarting_id
и floorTile_id
могут быть кратны inventory 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.