$ this-> setTable()在模型

时间:2018-01-02 02:24:27

标签: php laravel laravel-5

我是laravel的新手。我想在模型的构造函数中将表名更改为给定的字符串。下面的代码是我尝试过的,但它似乎无法正常工作。

任何建议或建议都将不胜感激。

谢谢

模型

class Custom extends Model
{
protected $guarded = ['id', 'ct'];

const UPDATED_AT = null;
const CREATED_AT = 'ct';

public function __construct(array $attributes = [], string $tableName = null) {

    parent::__construct($attributes);

    $this->setTable($tableName);
}

}

控制器

$tableName = 'some string';
$custom = new Custom([], $tableName);
$result = $custom->create($data);

2 个答案:

答案 0 :(得分:2)

您只在构造函数上传递一个参数,但它需要2个参数。所以,要么传递两个参数,要么像这样制作构造函数 -

public function __construct($table = null, $attr = [])
{
    $this->setTable($table);
    parent::__construct($attributes);
}

但我不明白你为什么这样做?标准做法是为每个表创建一个模型。你应该这样做。

答案 1 :(得分:0)

没有Model :: create方法。这是神奇的恶作剧通过Model::__call。致电$custom->create(...)会将来电转接至Builder::create,呼叫Builder::newModelInstance,然后拨打Model::newInstance。此代码根本不了解原始模型,它只知道$data属性。 (它通常在静态上下文中调用,如Model::create(...),没有原始实例。)

最简单的解决方法是创建一个派生自Custom的新类,并让它声明$ table属性。这将需要每个表一个模型。

class Custom2 extends Custom {
    public $table = 'some string';
}