如何使用ID创建数组的模型集合 - Laravel

时间:2016-12-17 01:26:13

标签: arrays laravel collections laravel-5.3 hydration

我正在使用按钮attach (name)' for each model which is not connected to the base model with a belongsToMany`关系创建一个foreach循环。

我有一个包含特定型号ID的数组

$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方法对我不起作用。没有任何东西可以从系列中删除。

任何帮助表示赞赏。 THX。

1 个答案:

答案 0 :(得分:1)

您可以使用whereNotIn()解决问题:

$attached_stages = $object->stages()->getRelatedIds()->toArray();

$missing_stages = Stage::whereNotIn('id', $attached_stages)->get();