是否有可能使用雄辩的方式为模型获取不同模型类型的集合?

时间:2016-05-17 14:41:42

标签: php laravel eloquent

如果我的模型需要具有不同模型数组的属性。是否有一种雄辩的方法或方法来处理这类问题?

例如。 我有一个功能模型,需要一个方法来获取来自不同模型的对象数组。

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

1 个答案:

答案 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一致,真的很棒。