Как создать коллекцию моделей из массива с их идентификаторами - Laravel
Я создаю цикл foreach с кнопкой attach (name)' for each model which is not connected to the base model with a
принадлежит родственникам
У меня есть массив с идентификаторами для определенной модели
$attached_stages = $object->stages()->getRelatedIds()->toArray(); // output: 1, 2
Тогда у меня есть все экземпляры модели для той же модели,
$all_stages = Stage::orderBy('id', 'asc')->pluck('id')->all(); // output: 1,2,3,4 ... 6
$missing_stages = array_diff($all_stages, $attached_stages); // output: 3,4,5,6
Мой вопрос: как достать коллекцию из $missing_stages
массив
Массив создан как и ожидалось
Мой вопрос (альтернативное решение)
На самом деле я пытаюсь получить коллекцию моделей, которые не привязаны к основной $object
с stages()
связь.
Отношение определяется следующим образом:
public function stages()
{
return $this->belongsToMany('App\Models\Stage', 'lead_stage', 'lead_id', 'stage_id')->withPivot('id','status')->withTimestamps();
}
и я не могу получить желаемую коллекцию с этим кодом:
$all_stages = Stage::get(); // output: collction 1,2,.... 6
$attached_stages = $object->stages(); // output: 1, 2
$missing_stages = $all_stages->diff($attached_stages); // expected output: 3,4,5,6
Примечание: я попытался удалить основную часть в определении отношения, но это не помогло, diff
метод не работает для меня. Ничего не вырезано из коллекции.
Любая помощь приветствуется. Спасибо.
1 ответ
Решение
Ты можешь использовать whereNotIn()
для вашей проблемы как:
$attached_stages = $object->stages()->getRelatedIds()->toArray();
$missing_stages = Stage::whereNotIn('id', $attached_stages)->get();