我有一个模型测试如下
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Test extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
public function __construct() {
if (!\App::environment('production')) {
$this->table='test_stage';
}
}
我确保test_stage表中有一个'deleted_at'列。但软删除不起作用。使用delete()方法永久删除表中的记录。作为验证的附加步骤,我手动为某些列添加了“deleted_at”值。但查询模型仍然给我软删除记录。
此外,完全删除模型构造函数,并使用:
简单地定义表名protected $table = 'test_stage';
像魅力一样!那是软删除神奇地再次开始工作。
或者有没有办法根据环境定义表名而无需定义构造函数?
答案 0 :(得分:6)
我认为问题可能是你要覆盖Illuminate\Database\Eloquent\Model
中设置的构造函数。你试过吗
public function __construct(array $attributes = []) {
parent::__construct($attributes);
if (!\App::environment('production')) {
$this->table='test_stage';
}
}
编辑:更详细的解释
当您覆盖正在扩展的课程的constructor
时,原始内容将不再执行。这意味着不能执行雄辩模型的必要功能。请参阅以下constructor
的{{1}}:
Illuminate\Database\Eloquent\Model
通过确保扩展类需要与扩展类相同的构造函数参数并首先执行/**
* Create a new Eloquent model instance.
*
* @param array $attributes
* @return void
*/
public function __construct(array $attributes = [])
{
$this->bootIfNotBooted();
$this->syncOriginal();
$this->fill($attributes);
}
,parent::__construct($attributes);
为首先执行扩展类。之后,您可以在扩展类中覆盖constructor
。