我试图改变每个集合的元素。什么都没发生。
最小例子:
.each
但是不起作用...... $ roles集合与{{1}}函数之前的相同。有什么帮助吗?
答案 0 :(得分:1)
使用map()
方法代替each()
:
$users->roles->map(function($role)
{
$role->text = 'New text';
});
阅读有关收藏的简短文档:http://laravel.com/docs/5.0/collections
答案 1 :(得分:0)
尝试传递参考
$roles = $users->roles->each(function(&$role)
{
$role->text = 'New text';
});
或许这个:
$roles = $users->roles;
$roles->each(function($role)
{
$role->text = 'New text';
});
修改
正常的foreach是否有效?
$roles = $users->roles;
foreach($roles as &$role){
$role->text = 'New text';
});
答案 2 :(得分:0)
我不知道它是否已经解决,但我在查询中发现了相同的情况。
如果你在角色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()位置。