如果我的模型需要具有不同模型数组的属性。是否有一种雄辩的方法或方法来处理这类问题?
例如。 我有一个功能模型,需要一个方法来获取来自不同模型的对象数组。
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 表,其中包含以下内容:
featured_model_type值将是表示模型类型的字符串。 model_id将是相关模型表的外键。
但是我看不出你如何能够使用eloquent为特征模型中的getArrayOfDifferentObjects方法返回数据。
任何指针都会非常感激。非常感谢,J
答案 0 :(得分:1)
你在那里描述的,基本上是一个Polymorphic Relations
,它可以处理这些情况,并且可以轻松取出它们,而不是我制作一个补充案例,阅读文档,这很好在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;
}
这个的基础是,您可以使用types
app
种子定义不同的namespace
,从那里静态调用它们,这将访问数据库表中的预定义类型,然后找到element
并将其添加到array
。话虽如此,这是我头脑中所做的,没有编译检查,没有在Laravel
中运行,但它应该让你知道该怎么做,如果你可以改变你的结构与Polymorphic Relations
一致,真的很棒。