是否可以在运行时为Laravel / Eloquent定义主键?

时间:2014-03-11 18:47:41

标签: laravel eloquent

在Eloquent中,我知道可以使用$ model-> setTable()在运行时定义表。

我尝试在构造函数中添加一个新项目,如:

$myModel = new \MyModel(array(), 'my_primary_key');
$myModel->setTable('mytable');

构造函数为:

class MyModel extends Eloquent { 
    public function __construct($attributes = array(), $primaryKey = 'id') {
        parent::__construct($attributes); // Eloquent
        $this->primaryKey = $primaryKey;
    }
}

这使我的$ primaryKey ='id'成为默认值。 - 这个不起作用,因为它不会将primaryKey更改为我在调用构造函数中定义的任何内容,它只是获取默认值('id')。如果我没有设置默认值,我会收到以下错误:

 Missing argument 3 for MyModel::__construct(), called in
 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 517 and defined

我也尝试过:

 $myModel->setAttribute('primaryKey', 'my_primary_key');

但是这个没有设置属性

但没有任何作用。 Laravel的默认设置是将'id'作为primaryKey,但是在我的表中我有类似'car_id'的表格,等等,所以我得到如下错误:

 Column not found: 1054 Unknown column 'id' in 'where clause' 
 (SQL: select * from `cars`      where `id` = 1 limit 1)

我试着查看代码:https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php#L1415,但它没有在运行时设置它的方法。

0 个答案:

没有答案