This is the query:
x
$checklist_items = AppModelsChecklistItem::with('checklist')
->where('checklist.ambulance_id', '=', $amb_id)->where('item_stock_id', '=', $item->item_stock_id)->where('used', '=', 0)->get();
I am trying to get all the checklist items that have the same item_stock_id
from the checklists that have the same ambulance_id
.
However, the query from above is not working, showing me this error:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'checklist.ambulance_id' in 'where clause'
select
*
from
`checklist_items`
where
`checklist`.`ambulance_id` = 1
and `item_stock_id` = 1549
and `used` = 0
Below is the ChecklistItem model:
class ChecklistItem extends Model
{
use HasFactory;
protected $guarded = [];
public $timestamps = false;
public function item() {
return $this->hasMany( Item::class );
}
public function item_stock() {
return $this->hasMany( ItemStock::class );
}
public function checklist() {
return $this->hasMany( Checklist::class );
}
public function checklist_item() {
return $this->belongsTo( ChecklistItem::class);
}
}
And this is the Checklist model:
class Checklist extends Model
{
use HasFactory;
protected $fillable = [
'inventory_id',
'medic_id',
'ambulance_id',
'checklist_date',
'patient_number',
'tour'
];
protected $guarded = [];
public $timestamps = false;
public function medic() {
return $this->belongsTo( Medic::class );
}
public function inventory() {
return $this->belongsTo( Inventory::class );
}
public function ambulance() {
return $this->belongsTo( Ambulance::class );
}
public function checklistitems() {
return $this->hasMany( ChecklistItem::class);
}
public function assistent() {
return $this->belongsTo( Assistent::class );
}
public function ambulancier() {
return $this->belongsTo( Ambulancier::class );
}
}
Advertisement
Answer
To constrain the eager load you need to specify the constraint within the subquery of with
. You could try the below
$checklist_items = AppModelsChecklistItem::with([
'checklist' => fn($query) => $query->where('ambulance_id', $amb_id)
])
->where('item_stock_id', '=', $item->item_stock_id)
->where('used', '=', 0)
->get();