首页 > 解决方案 > 如何停止创建两个字段相等的 Laravel 模型?

问题描述

我有一张桌子叫purchase_records. 采购记录表中的一个字段被称为buyer,另一个被称为seller- 这些字段都与users表相关,并且它们不能具有相同的值。

MySQL 不支持检查约束,如果这是另一个 SQL 服务器,我可以将其添加到创建表的迁移的底部:

DB::statement("ALTER TABLE purchase_records ADD CONSTRAINT different_users CHECK (seller <> buyer)");

我不认为 Laravel 有办法轻松监听 MySQL 触发器,所以我提出的解决方案是覆盖模型create()上的方法PurchaseRecord- 如下:

public static function create(array $attributes = [])
{
    if ($attributes['buyer'] === $attributes['seller'] {
        throw new InvalidArgumentException();
    }

    return static::query()->create($attributes);
}

我正在使用存储库模式来记录购买记录,并且有政策和验证管理谁可以做什么,但我想确保在我的应用程序的最低级别,用户不能从自己那里购买东西 - 这是最好的吗有什么办法可以保证?

标签: phpmysqllaraveleloquent

解决方案


推荐阅读