我不知道它是否已解决,但我在进行联接的查询中发现了同样的问题。
问题可能是您在角色 Relation 中有一个联接。
我有,不工作:
\BF\Models\RentalBike::active()
->has('sizes')
->whereHas('bike', function ($q) {
$q->active();
})
->whereHas('rental', function ($q) {
$q->active();
})
->with([
'sizes' => function ($q) {
$q->join('sizes', 'size_id', '=', 'sizes.id')
->orderBy('sizes.weight')
->get(['rental_bike_size.id',
'rental_bike_size.size_id',
'rental_bike_size.rental_bike_id',
'sizes.name',
'sizes.weight'
])->each(function($o) {
$o->setAttribute('stock_available', 123);
});
},
'bike' => function ($q) {
$q->get(['id', 'model', 'brand_id']);
},
'bike.brand' => function ($q) {
$q->get(['id', 'name']);
}
])
->get(['id', 'id as rental_bike_id', 'bike_id', 'price_id']);
解决方法:
return \BF\Models\RentalBike::active()
->has('sizes')
->whereHas('bike', function ($q) {
$q->active();
})
->whereHas('rental', function ($q) {
$q->active();
})
->with([
'sizes' => function ($q) {
$q->join('sizes', 'size_id', '=', 'sizes.id')
->orderBy('sizes.weight')
->get(['rental_bike_size.id',
'rental_bike_size.size_id',
'rental_bike_size.rental_bike_id',
'sizes.name',
'sizes.weight'
]);
},
'bike' => function ($q) {
$q->get(['id', 'model', 'brand_id']);
},
'bike.brand' => function ($q) {
$q->get(['id', 'name']);
}
])
->get(['id', 'id as rental_bike_id', 'bike_id', 'price_id'])
->each(function($o) {
$o->sizes->each(function($o){
$o->setAttribute('stock_available', 'bar');
});
});
注意 .each() 位置。