I have two models (and database tables with Laravel naming conventions) and I am trying to Eager Load the Collections
with Equipment
and Equipment.collection_meters
where collection_meter
equals Collection.id
.
How can I access the collections.id
in the child relationship $query->with
?
or
How can I access the equipment.pivot.collection_id
in the child relationship $query->with
?
Here are my models ...
class Collection extends Model {
public function equipment() {
return $this->belongsToMany(Equipment::class, 'collection_equipment', 'collection_id', 'equipment_id')->withTimestamps();
}
}
class CollectionMeter extends Model {
public function equipment() {
return $this->belongsTo(Equipment::class);
}
}
class Equipment extends Model {
public function collection_meters() {
return $this->hasMany(CollectionMeter::class)->latest(); // ->currentStatus('active')
}
}
equipment_id
column is in the collection_meters
table
Here is the code I have tried but I just can't seem to get the Collection.id
in the child relationship query. If I leave out the child $query->where
, I get ALL of the equipment.equipment_meters
.
$collections = Collection::with([
'equipment',
'equipment.collection_meters' => function($query) {
$query->where('collection_meters.collection_id', '=', 'collections.id');
}
])
->get();
I have tried these in place of 'collections.id'
with the same result
'equipment.pivot.collection_id'
'equipment.collection_id'
I do see this in the [equipment] => Array
, can I access [collection_id] => 2
in the $query->where
somehow?
[pivot] => Array
(
[collection_id] => 2
[equipment_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-17 00:17:00
)
Results without the $query->with
([collection_meters]
has ALL)
Array
(
[0] => Array
(
[id] => 2
[name] => Name of Collection
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[date_time] => 2019-09-16 04:41:26
[reconciliation_id] =>
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-16 23:44:43
[updated_at] => 2019-09-18 17:32:53
[equipment] => Array
(
[0] => Array
(
[id] => 1
[name] => Name of Equipment
[ims_identifier] => AFA-64
[operator_identifier] => 073076-01
[equipment_model_id] => 1
[operator_id] => 1
[location_id] => 4
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-07-17 13:17:28
[updated_at] => 2019-08-14 00:04:07
[pivot] => Array
(
[collection_id] => 2
[equipment_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-17 00:17:00
)
[collection_meters] => Array
(
[0] => Array
(
[id] => 17
[equipment_meter_id] => 1
[value] => 0.25
[gross] => 25.00
[refund] => 2.00
[test] => 2.00
[reading_start] => 72985
[reading_end] => 73085
[collection_id] => 3
[equipment_id] => 1
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-17 18:23:41
[updated_at] => 2019-09-17 22:56:50
)
[1] => Array
(
[id] => 9
[equipment_meter_id] => 1
[value] => 0.25
[gross] => 24.00
[refund] => 2.00
[test] => 1.00
[reading_start] => 72885
[reading_end] => 72985
[collection_id] => 2
[equipment_id] => 1
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-18 17:32:53
)
[2] => Array
(
[id] => 1
[equipment_meter_id] => 1
[value] => 0.25
[gross] => 282.50
[refund] => 3.26
[test] => 0.00
[reading_start] => 71755
[reading_end] => 72885
[collection_id] => 1
[equipment_id] => 1
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-11 22:38:31
[updated_at] => 2019-09-11 22:38:31
)
)
)
Results with the $query->with
([collection_meters]
is empty)
Array
(
[0] => Array
(
[id] => 2
[name] => Name of Collection
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[date_time] => 2019-09-16 04:41:26
[reconciliation_id] =>
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-16 23:44:43
[updated_at] => 2019-09-18 17:32:53
[equipment] => Array
(
[0] => Array
(
[id] => 1
[name] => Name of Equipment
[ims_identifier] => AFA-64
[operator_identifier] => 073076-01
[equipment_model_id] => 1
[operator_id] => 1
[location_id] => 4
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-07-17 13:17:28
[updated_at] => 2019-08-14 00:04:07
[pivot] => Array
(
[collection_id] => 2
[equipment_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-17 00:17:00
)
[collection_meters] => Array
(
)
) ...
Results expected ([collection_meters]
has [id] => 2
equals to [collection_id] => 2
)
Array
(
[0] => Array
(
[id] => 2
[name] => Name of Collection
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[date_time] => 2019-09-16 04:41:26
[reconciliation_id] =>
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-16 23:44:43
[updated_at] => 2019-09-18 17:32:53
[equipment] => Array
(
[0] => Array
(
[id] => 1
[name] => Name of Equipment
[ims_identifier] => AFA-64
[operator_identifier] => 073076-01
[equipment_model_id] => 1
[operator_id] => 1
[location_id] => 4
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-07-17 13:17:28
[updated_at] => 2019-08-14 00:04:07
[pivot] => Array
(
[collection_id] => 2
[equipment_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-17 00:17:00
)
[collection_meters] => Array
(
[0] => Array
(
[id] => 9
[equipment_meter_id] => 1
[value] => 0.25
[gross] => 24.00
[refund] => 2.00
[test] => 1.00
[reading_start] => 72885
[reading_end] => 72985
[collection_id] => 2
[equipment_id] => 1
[operator_id] => 1
[location_id] => 4
[account_id] => 1
[created_by_id] => 1
[updated_by_id] => 1
[created_at] => 2019-09-17 00:17:00
[updated_at] => 2019-09-18 17:32:53
)
)
)