hasOne
class PurchaseDetail extends Model
{
use HasFactory;
public function _items(){
return $this->hasOne(Inventory::class,'id','_item_id')->select('id','_item as _name','_unit_id','_unique_barcode','_pur_rate','_barcode')->with(['_units']);
}
( extends Model – This means PurchaseDetail is an Eloquent model, representing a table ( purchase_details) in the database. )
Relationship Method: _items() method name
$this->hasOne(Inventory::class, 'id', '_item_id')
$this->hasOne(Inventory::class, 'id', '_item_id')
This defines a one-to-one relationship between PurchaseDetail and Inventory.
Parameters:
Inventory::class → The related model.
id → The column in Inventory (the local key).
_item_id → The foreign key in PurchaseDetail.
Meaning:
A PurchaseDetail "has one" Inventory item, where Inventory.id = PurchaseDetail._item_id.
Table |
column |
Relationship |
purchase_details |
_item_id |
Hasone |
Inventory |
id |
->select('id','_item as _name','_unit_id','_unique_barcode','_pur_rate','_barcode')
These columns retrieved from the Inventory table.
So when you access $purchaseDetail->_items, you only get these columns: id, _name, _unit_id, _unique_barcode, _pur_rate, _barcode
|
class Inventory extends Model
….
…..
public
function _units(){
return
$this->hasOne(Units::class,'id','_unit_id')->select('id','_name','_code');
}
Model Name |
Table Name |
Key Columns |
Relationship |
PurchaseDetail |
purchase_details |
id, _item_id, other purchase fields |
hasOne → Inventory (_items) |
Inventory |
inventories |
id, _item, _unit_id, _unique_barcode, _pur_rate, _barcode |
hasOne → Units (_units) |
Units |
units |
id, _name, _code |
- |
PurchaseDetail → Inventory
A PurchaseDetail belongs to one Inventory item.
PurchaseDetail._item_id → Inventory.id
Eloquent relation: hasOne(Inventory::class, 'id', '_item_id')
Inventory → Units
Each inventory item has one unit.
Inventory._unit_id → Units.id
Eloquent relation: hasOne(Units::class, 'id', '_unit_id')