«Вызов функции-члена active_pest () для массива» при использовании SyncWithoutDetaching () для обновления сводной таблицы - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь использовать SyncWithoutDetaching () для обновления сводной таблицы (active_pest), но получаю сообщение об ошибке «Вызов функции-члена active_pest () on array»).

Основой здесь является то, что у меня есть 8 таблиц: продукты, вредные организмы, активные вещества (то есть активные ингредиенты), сельскохозяйственные культуры, active_product, pest_product, crop_product и active_pest.Моя форма собирает информацию о выбранном (агрохимическом) продукте - в этой форме пользователь выбирает вредителей, активные вещества и сельскохозяйственные культуры, связанные с этим продуктом.После отправки мой существующий код сохраняет ожидаемую информацию в таблице продуктов, и благодаря набору взаимосвязей «ownToMany» корректно обновляются сводные таблицы active_product, pest_product и crop_product.

Для любого данного продукта обычно есть 1 или 2 актива и 3-8 вредных организмов, и именно эти значения идентификатора я хочу добавить в сводную таблицу active_pest.

Мой код:

// ProductController

public function update(UpdateRequest $request)
{
  $actives = $request->get('active');
  $actives->active_pest()->SyncWithoutDetaching( $request->get('pest'));

...

}

// pest model
public function active_pest()
{
  return $this->belongsToMany('App\Models\Pest', 'active_pest', 'active_id', 'pest_id');
}

Ответы на другие вопросы об этом типе сообщения об ошибке указывают, что что-то не так с отношением active_pest () - но я получил то же сообщение об ошибке после опечатки там (active_pestr).Несмотря на это, я не понимаю, что я делаю неправильно.

Понимание ценится.Спасибо, Том

1 Ответ

0 голосов
/ 21 февраля 2019
$actives = $request->get('active');

Просто верните массив, поэтому вы пытаетесь что-то вроде этого [1,2,3] -> active_pest ().

Это именно то, что он говорит.Вызов функции-члена active_pest () для массива.

Вам нужно работать с eloquent экземпляром, чтобы выполнить ->active_pest()->SyncWithoutDetaching( $request->get('pest'));

Таким образом, вы можете найти такие экземпляры, как это:

$actives = Active::whereIn('col_name', $request->get('active'))->get();

Это вернет вам коллекцию экземпляров, чтобы сохранить вредные организмы для каждого из них, вам необходимо выполнить итерацию с foreach следующим образом:

foreach($actives as $active){
    $active->active_pest()->SyncWithoutDetaching( $request->get('pest'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...