我是Laravel的新手。在laravel中建立一个非常嵌套的关系以正常工作时,我遇到很多麻烦。
想要的行为如下,
我有5个模特。 Purchase
,Inventory
,Slab
,Scarting
和FloorTile
。
我在采购模型和库存模型之间存在一对一的关系,而库存与板坯,疤痕和地板砖之间又有进一步的关系。
我有购买ID,想从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。
答案 0 :(得分:1)
如果您的记录是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
。