Laravel的收藏。每个功能。

时间:2015-05-26 13:44:18

标签: laravel collections each

我试图改变每个集合的元素。什么都没发生。

最小例子:

.each

但是不起作用...... $ roles集合与{{1}}函数之前的相同。有什么帮助吗?

3 个答案:

答案 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()位置。