2015-05-26 4 views
0

Я попытался изменить элементы коллекции по каждому. Ничего не происходит.Коллекции в Laravel. каждая функция.

Минимальный пример:

$roles = $users->roles->each(function($role) 
{ 
    $role->text = 'New text'; 
}); 

Но не работает ... в $ роли коллекции является так же, как это было раньше функции .each. Любая помощь?

+0

Вы когда-нибудь это понимали? Сверху моей головы выглядит, что коллекция $ role пуста или вам нужно вызвать '$ role-> save();' в пределах закрытия. –

ответ

0

Постарайся передать ссылку

$roles = $users->roles->each(function(&$role) 
{ 
    $role->text = 'New text'; 
}); 

Или, может быть, это:

$roles = $users->roles; 
$roles->each(function($role) 
{ 
    $role->text = 'New text'; 
}); 

EDIT

ли нормальный Еогеасп работу?

$roles = $users->roles; 
foreach($roles as &$role){ 
    $role->text = 'New text'; 
}); 
+0

Только что проверил это, не работает. –

+0

Я знаю, что это не работает !!! Я изо всех сил пытаюсь изменить элемент из коллекции, но никто, кажется, не дает пути !!! – Xxxo

+0

№ Ответьте на вопросы, а не на вопросы :) –

1

Используйте map() метод вместо each():

$users->roles->map(function($role) 
{ 
    $role->text = 'New text'; 
}); 

Прочитайте краткие документы о коллекциях: http://laravel.com/docs/5.0/collections

+0

Я пробовал, но также не работает. – Xxxo

+0

. $ role = $ user-> role-> map (function ($ role) { $ role-> created_at = new \ Datetime(); }); echo $ role-> toJson(); Я получаю [null] – Xxxo

+0

@ Kostas обновляет вопрос до дампа коллекции перед 'map()' и after (используйте 'dd()'). –

0

Я не знаю, если она была решена, но я нашел то же самое в запросе где Я собирался присоединиться.

Возможно, проблема в том, что у вас есть соединение внутри ролей.

я, не работает:

\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().

Смежные вопросы