php - 是否可以使用 Eloquent 方式为模型获取不同模型类型的集合?

标签 php laravel eloquent

如果我有一个模型需要一个属性,该属性是不同模型的数组。有没有 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/

相关文章:

php - Laravel 5.2 - PHP 7.0.6 合并运算符返回空字符串

php - Deployer - no tty present and no askpass program specified - 如何使用 Deployer 进行部署

php - Laravel Eloquent 属性转换不起作用

php - Laravel Eloquent 查询数据透视表

php - 使用 PHP simpleXML 提取 XML 数据

php - 在 PHP 中回显 JavaScript

php - 路由中间的可选参数

mysql - 使用 Eloquent 关系将数据插入到两个不同的表中

php - PrestaShop 1.6 后台分页无法正常工作

php - 检查数据库中的数据并失败