如果我有一个模型需要一个属性,该属性是不同模型的数组。有没有 Eloquent 方法或方法来处理这类问题?
例如。 我有一个Feature 模型,它需要一种方法来获取来自不同模型的对象数组。
class Feature extends Model
{
public function getArrayOfDifferentObjects()
{
$array_of_objects=array();
???? ELOQUENT to get objects from different models ????
return $array_of_objects;
}
}
我有一个包含以下内容的feature_model_connections 表:
- feature_id
- featured_model_id
- featured_model_type
featured_model_type 值将是表示模型类型的字符串。 model_id 将是相关模型表的外键。
但是我看不出您如何能够使用 Eloquent 为特征模型中的 getArrayOfDifferentObjects 方法返回数据。
任何指针将不胜感激。非常感谢,J
最佳答案
你在那里描述的,基本上是一个多态关系
,它可以处理这些情况,并使获取它们变得容易,而不是我在编造案例,阅读文档,它写得很好,在 Polymorphic Relations
部分下。 https://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations
现在在你的范围内,你可以做这样的事情。
public function getArrayOfDifferentObjects()
{
$objects = [];
$features = DB::table('feature_model_connections')
->select('feature_id', 'featured_model_id', 'featured_model_type')->get();
foreach($features as $feature)
{
$type = '\\App\\' . $feature->featured_model_type; //App is you app namespace
$model = $type::find($feature->featured_model_id);
if($model)
$objects[] = $model;
}
return $objects;
}
这个的基础是,你可以定义不同的类型
,使用app
namespace
seed,从那里静态调用它们,这将访问数据库表中的预定义类型,然后找到元素
并将其添加到数组
。话虽如此,这是在我的脑海中完成的,没有编译检查,没有在 Laravel
中运行,但它应该会让你知道该怎么做,如果你可以改变你的结构,使用Polymorphic Relations
,它真的很棒。
关于php - 是否可以使用 Eloquent 方式为模型获取不同模型类型的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279286/