我正在尝试向我的模型添加唯一验证,但当我尝试更新数据时出现错误。桌子:acq_m_budgets==================================budget_id serial NOT NULL,budget_code character varying(15) NOT NULL,budget_name character varying(100) NOT NULL,ma_code character varying(10),start_period timestamp without time zone NOT NULL,end_period timestamp without time zone NOT NULL,budget numeric(16) DEFAULT 0,credit numeric(16) DEFAULT 0,debet numeric(16) DEFAULT 0,balance numeric(16) DEFAULT 0,reserve numeric(16) DEFAULT 0,created_by character varying(100) NOT NULL,created_on timestamp without time zone DEFAULT now(),updated_by character varying(100) NOT NULL,updated_on timestamp without time zone DEFAULT now(),CONSTRAINT PK_AcqMBudgets PRIMARY KEY (budget_id),CONSTRAINT UN_AcqMBudgets UNIQUE (budget_code)我的模型:AcqMBudgets.phpclass AcqMBudgets extends Model{ public $timestamps = false; protected $primaryKey = 'budget_id'; public $sortable = ['budget_code', 'budget_name', 'ma_code', 'balance', 'updated_on']; protected $fillable = ['budget_code', 'budget_name', 'ma_code', 'start_period', 'end_period', 'budget', 'credit', 'debet', 'balance', 'reserve', 'created_by', 'created_on', 'updated_by', 'updated_on']; protected $attributes = [ 'budget' => 0, 'credit' => 0, 'debet' => 0, 'balance' => 0, 'reserve' => 0, ]; 在模型上,我已经将创建和更新方法的规则分开了。不同之处在于 updateRules() 中,规则数组中需要一个主键参数。在控制器的update功能上,出现错误,指出:SQLSTATE[42703]: Undefined column: 7 ERROR: column "id" does not exist LINE 1: ...from "acq_m_budgets" where "budget_code" = $1 and "id" <> $2 ^ (SQL: select count(*) as aggregate from "acq_m_budgets" where "budget_code" = N01 and "id" <> )。我使用的主键是整数和增量,但由于某些情况,主键的名称不能只是id,所以我将其更改为budget_id并已在模型开头声明它。根据错误消息,Laravel 似乎一直在尝试与该id字段而不是我声明的字段进行比较。需要做什么来解决这个问题?
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
我将使用 Rule 命名空间,您可以通过它调用 unique。为此,您必须使用数组来验证规则而不是字符串,无论如何,这是更好的可读性方法。
Rule::unique
有第二个参数是 id 列的方法
'budget_code' => [
'required',
Rule::unique('acq_m_budgets', 'budget_code')->ignore($id, 'budget_id'),
'max:15'
]
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消