@EVOSandru6

Как объеденить 2 выражения в Eloquent в одно — создания модели и получение ее контекста совместно с each инструкцией?

Добрый день.

Таким образом я создаю и получаю контекст созданной модели в $attribute

$attribute = factory(Attribute::class)->create();
Далее создаю модели связи, все ок:

$attribute->multiples()->createMany(factory(Multiple::class, $multiples_count)->raw());


Но если я объединяю 2 выражения в одно:

$attribute = factory(Attribute::class)->create()->each(function (Attribute $createdAttribute) {
     $createdAttribute->multiples()->createMany(factory(Multiple::class, $multiples_count)->raw());
});


То в $attribure не содержится контекст созданной модели. Как можно, сделать, чтобы содержался?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
greabock
@greabock
Могу
factory(Attribute::class)->create();
На сколько я могу понимать вернёт инстанс модели Attribute. Но дальше вы чейните
factory(Attribute::class)->create()->each(#...)
Возникает логичный вопрос each (каждый), простите, что? Но даже допустим что у вас опечатка, и вы хотели написать
$attribute = factory(Attribute::class, 2)->create()->each(#...)

Но тогда правильно будет
$attributes = factory(Attribute::class, 2)->create()->each(#...)

И в $attributes будет коллекция инстансов Attribute.

Едем дальше... положим мы это дело поправили и написали правильно

$attributes = factory(Attribute::class, 2)->create()->each(function (Attribute $createdAttribute) {
     $createdAttribute->multiples()->createMany(factory(Multiple::class, $multiples_count)->raw());
});

Откуда в кложуре появится $multiples_count?

ну давайте и это поправим

$multiples_count = 5;
$attributes = factory(Attribute::class, 2)->create()->each(function (Attribute $createdAttribute) use ($multiples_count) {
     $createdAttribute->multiples()->createMany(factory(Multiple::class, $multiples_count)->raw());
});


Тогда

$multiples_count = 5;
$attributes = factory(Attribute::class, 2)->create()->each(function (Attribute $createdAttribute) use ($multiples_count) {
     $createdAttribute->multiples()->createMany(factory(Multiple::class, $multiples_count)->raw());
});

foreach  ($attributes as $attribute) {
   $attribute->doSomeThing(); // Вот вам и ваш "контекст"
}


К слову, "контекст" - термин, в данном случае, неуместный. Инстанс/Объект/Экземпляр - вот подходящие слова.
"Контекст" же - это про указатели $this/static/self или текущую область видимости. Что именно - зависит от контекста разговора, простите за каламбур )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы