为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 7 - 更新的唯一约束问题

Laravel 7 - 更新的唯一约束问题

PHP
泛舟湖上清波郎朗 2023-08-11 16:37:14
我正在尝试向我的模型添加唯一验证,但当我尝试更新数据时出现错误。桌子: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'

]


查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信