This is the query:
$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();