如何使用 ID 从数组创建 collection 个模型 - Laravel
how create a collection of models from array with their IDs - Laravel
我正在创建一个带有按钮 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
数组中得到一个 collection
数组按预期创建
我的问题(备选方案)
我实际上想要得到的是 collection 模型,这些模型没有附加到具有 stages()
关系的主要 $object
。
关系定义如下:
public function stages()
{
return $this->belongsToMany('App\Models\Stage', 'lead_stage', 'lead_id', 'stage_id')->withPivot('id','status')->withTimestamps();
}
并且我无法使用此代码获得我想要的 collection:
$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
方法对我不起作用。 collection.
没有任何删减
感谢任何帮助。谢谢
您可以使用 whereNotIn()
作为您的问题:
$attached_stages = $object->stages()->getRelatedIds()->toArray();
$missing_stages = Stage::whereNotIn('id', $attached_stages)->get();
我正在创建一个带有按钮 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
数组中得到一个 collection
数组按预期创建
我的问题(备选方案)
我实际上想要得到的是 collection 模型,这些模型没有附加到具有 stages()
关系的主要 $object
。
关系定义如下:
public function stages()
{
return $this->belongsToMany('App\Models\Stage', 'lead_stage', 'lead_id', 'stage_id')->withPivot('id','status')->withTimestamps();
}
并且我无法使用此代码获得我想要的 collection:
$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
方法对我不起作用。 collection.
感谢任何帮助。谢谢
您可以使用 whereNotIn()
作为您的问题:
$attached_stages = $object->stages()->getRelatedIds()->toArray();
$missing_stages = Stage::whereNotIn('id', $attached_stages)->get();