在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,但它没有在运行时设置它的方法。