我需要覆盖上述方法以跳过一些数据库记录。使用where不是一个选项,因为我必须每次都使用它,因为数据库中有我大部分时间不需要的记录,并且我不允许从数据库中删除它们。这是我这样做的尝试:
class SomeTable extends BaseModel {
public static function first() {
$query = static::query();
$data = $query->first();
if($data && $data->type == 'migration_type') return null;
return $data;
}
public static function get() {
$query = static::query();
$data = $query->get();
foreach($data as $key => $item) {
if($item->type == 'migration_type') unset($data[$key]);
}
return $data;
}
}
此代码的问题在于它仅在模型上直接调用时才有效。如果我正在使用其他一些函数,例如where,之前get或first方法,它只会跳过我覆盖的方法。这样做的正确方法是什么,我应该将此代码放在模型中吗?
我的问题与上述问题的答案不重复,据说:
从扩展您的 CustomModel 的模型进行的所有查询都将获得这个新方法
而且我只需要为特定模型覆盖这两个函数,而不是应用程序中的每个函数,因为并非所有表都有type列。这就是我在模型类中编写它们的原因。