首页 > 解决方案 > 使用动态模型 Laravel 的雄辩查询

问题描述

我有这段代码,用于在 laravel 中创建动态模型

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class CRUD extends Eloquent
{   
    public $collection ;

    function __construct($attributes = [],$collection ="" )
    {  
        parent::__construct($attributes);

  $this->collection = $collection;

    }

}

我用这段代码调用这个类

     $table='HW12345' ;
     $device_model = new CRUD([],$table);
     $device_model::limit(10)->get();

但是这段代码返回空数组。如果我将此代码放入构造器中

echo $collection

它打印正确的值

HW12345

这意味着模型获取传递变量的值。

如果我替换了代码

$this->collection = $collection;

$this->collection = 'HW12345';

它工作正常,没有任何问题,并从集合 HW12345 返回数据我的问题是什么,为什么会这样

标签: phplaravelmongodbeloquent

解决方案


$collection是受保护的财产。

您的模型中不需要此声明:

public $collection ;

而且我还会在调用父构造函数之前设置集合值。

function __construct($attributes = [], $collection = "")
    {  
        $this->collection = $collection;
        parent::__construct($attributes);
    }

因为通常,受保护的属性是在任何构造发生之前声明的。

以这种方式使用 Eloquent 也很奇怪。通过不提前声明模型,您删除了许多静态和智能功能。

例如:你不能这样做:

$results = Model::where('field', 'value')->get();

$newRecord = Model::create([values...]);

等等


推荐阅读