Как создать коллекцию моделей из массива с их идентификаторами - 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();
Другие вопросы по тегам