php - 使用动态模型 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 返回数据我的问题是什么,为什么会这样
解决方案
$collection
是受保护的财产。
您的模型中不需要此声明:
public $collection ;
而且我还会在调用父构造函数之前设置集合值。
function __construct($attributes = [], $collection = "")
{
$this->collection = $collection;
parent::__construct($attributes);
}
因为通常,受保护的属性是在任何构造发生之前声明的。
以这种方式使用 Eloquent 也很奇怪。通过不提前声明模型,您删除了许多静态和智能功能。
例如:你不能这样做:
$results = Model::where('field', 'value')->get();
$newRecord = Model::create([values...]);
等等