If I execute the following:
App\Assignment::with(['unit.records' => function ($q) {
$q->where('process_date', '>=', '2016-01-01')
->where('process_date', '<=', '2018-09-27')
->orderBy('process_date')
->orderBy('process_hour')
->limit(1);
}])
->whereIn('id', [9])
->get();
Then I get the following result:
Illuminate\Database\Eloquent\Collection {#1104
all: [
App\Assignment {#1112
id: 9,
unit_id: 6,
start_date: "2015-11-25",
end_date: "2016-01-04",
unit: App\Unit {#986
id: 6,
records: Illuminate\Database\Eloquent\Collection {#945
all: [
App\Record {#853
id: 6624,
unit_id: 6,
process_date: "2017-09-19",
process_hour: 14,
},
],
},
},
},
],
}
Note how the loaded unit has a record that matches the query.
Now, if I use the exact same query but add another assignment (49) to my whereIn
array:
App\Assignment::with(['unit.records' => function ($q) {
$q->where('process_date', '>=', '2016-01-01')
->where('process_date', '<=', '2018-09-27')
->orderBy('process_date')
->orderBy('process_hour')
->limit(1);
}])
->whereIn('id', [9,49])
->get();
The record for assignment 49 is shown, but the record for assignment 9 does not show up anymore:
Illuminate\Database\Eloquent\Collection {#1032
all: [
App\Assignment {#1014
id: 9,
unit_id: 6,
start_date: "2015-11-25",
end_date: "2016-01-04",
unit: App\Unit {#1283
id: 6,
records: Illuminate\Database\Eloquent\Collection {#1254
all: [],
},
},
},
App\Assignment {#1061
id: 49,
unit_id: 29,
start_date: "2017-02-24",
end_date: "9999-12-31",
unit: App\Unit {#1279
id: 29,
records: Illuminate\Database\Eloquent\Collection {#1131
all: [
App\Record {#1284
id: 6062,
unit_id: 29,
process_date: "2017-03-10",
process_hour: 13,
},
],
},
},
},
],
}
The record that matches the criteria for assignment 9 obviously exists, but for some reason it doesn't get loaded when the query finds more than one assignment with a unit/record that matches the criteria.
I tested this with more assignments as well, and in each case the record will only show up for the last assignment in the array.
What's the deal here?
via
Chebli Mohamed