【问题标题】:how to check if user id exists in foreign table如何检查外部表中是否存在用户ID
【发布时间】:2021-05-23 21:10:46
【问题描述】:

我需要检查外部表中是否存在用户 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();
        });

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

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

【问题讨论】:

  • 你发布了同一张桌子
  • 您可以通过$staff->packaging()->exists();查看
  • 我试过但是打包关系返回null
  • 因为您没有在迁移中定义任何外键。创建edit并更新Cutting迁移数据
  • 我不确定如何定义外键。所以有什么帮助吗?

标签: laravel eloquent foreign-keys relationship laravel-8


【解决方案1】:

您应该应用外键约束。见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();
});

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

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

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

您还提到您需要检查工作人员是否与packagingcutting 表相关联。 根据您在迁移中所拥有的那种关系,工作人员可以同时属于packagingcutting。这就是你想要的吗?

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多