问题描述
我需要检查外部表中是否存在用户 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',];
}
您还提到您需要检查员工是否与 packaging
或 cutting
表相关联。
根据您提供的迁移中的关系类型,员工可能同时属于 packaging
和 cutting
。这就是你想要的吗?
在这种情况下,您可以在 packaging
模型上创建 cutting
和 User
关系。
public function packaging()
{
$this-> hasMany(Packaging::class)
}
然后通过执行以下操作查询具有任何 packaging
记录的用户:
// Retrieve all users that have at least one packaging record...
$users = User::has('packaging')->get();