如何检查用户ID是否存在于外部表中

问题描述

我需要检查外部表中是否存在用户 ID。我有两张三桌,分别是员工、包装和切割。表包装和切割都有staff_id列我需要检查员工是属于包装还是切割。那么我如何实现这一目标。

包装表

 Schema::create('packaging',function (Blueprint $table) {
            $table->increments('id');
            $table->integer('staff_id');
            $table->string('business_name');
            $table->string('tax_id');
            $table->string('phone_number');
            $table->timestamps();
        });

切割台

 Schema::create('cutting',function (Blueprint $table) {
            $table->increments('id');
            $table->integer('staff_id');
            $table->string('business_name');
            $table->string('tax_id');
            $table->string('phone_number');
            $table->timestamps();
        });

我尝试在员工模型中使用belongsTo 和hasOne 关系进行检查。但它没有用。

    public function packaging()
    {
        return $this->hasOne(\App\Models\Admin\PackagingCompany::class,'staff_id');
    }

解决方法

您应该应用外键约束。见docs

Schema::create('packaging',function (Blueprint $table) {
    $table->increments('id');
    $table->foreign('staff_id')->references('id')->on('staff');
    $table->string('business_name');
    $table->string('tax_id');
    $table->string('phone_number');
    $table->timestamps();
});

这将阻止您在没有有效 packaging 的情况下保存 staff_id 记录

您还可以在输入存储员工的任何地方根据包装模型应用验证。这将进入您注入控制器的 form request

public function rules()
{
    return [
        'staff_is' => 'exists:staff',];
}

您还提到您需要检查员工是否与 packagingcutting 表相关联。 根据您提供的迁移中的关系类型,员工可能同时属于 packagingcutting。这就是你想要的吗?

在这种情况下,您可以在 packaging 模型上创建 cuttingUser 关系。

public function packaging()
{
    $this-> hasMany(Packaging::class)
}

然后通过执行以下操作查询具有任何 packaging 记录的用户:

// Retrieve all users that have at least one packaging record...
$users = User::has('packaging')->get();