当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel上建立用户表和其他无主键的关系

诸葛彦
2023-03-14

我已将users表的外键(clinic_uuid,而不是主键)分配给clinics表,如下命令所示。

$table->foreign('clinic_uuid',100)->references('clinic_uuid')->on('clinics');

在迁移之后,我添加了'有很多用户'关系到诊所模型。

public function users(){
 return $this->hasMany(User::class);
}

以及与用户模型的关系

public function clinic(){
   return $this->belongsTo(Clinic::class,'clinic_uuid');
}

之后,我添加了一些诊所表。

    clinic_uuid       name
----------------------------------
       a1111       dog clinic
       a2222       cat clinic

还有用户表。

  id    clinic_uuid       name
----------------------------------
  1       a1111           jame
  2       a1111           matt

然后,我尝试我的控制器,如下代码,但我只得到空值。

Auth::user()->clinic()->get();   --> get null
User::find(1)->clinic()->get();  --> get null

谢谢你的建议。

共有2个答案

顾琛
2023-03-14

试试这个,

User::with('clinic')->findOrFail(auth()->id());

尝试使用急切加载Laravel急切加载

希望这有帮助:)

顾鸣
2023-03-14

您需要告诉Eloquent这两个关系的本地和外键是什么,因为它们都不遵循默认约定:

public function clinic()
{
    return $this->belongsTo(Clinic::class, 'clinic_uuid', 'clinic_uuid');
}
public function users()
{
    return $this->hasMany(User::class, 'clinic_uuid', 'clinic_uuid');
}

因为两个表的列名是相同的,所以对于这个例子来说并不重要,但是您总是可以参考文档来确定哪个列名应该放在关系方法中的哪个位置。

 类似资料:
  • 我试图在laravel中创建一个主键-外键关系,但我一直遇到这个错误 我似乎找不到哪里出错了,因为我在查看了SO上的其他答案后,对模式进行了更改。 当我运行时,上面的错误会弹出,这是一个部分迁移。 任何指向这将是真棒,因为我已经寻找了一段时间的解决方案! 谢谢 员工表 部门表 工资表 新增:DB播种机。 根据评论更改了DB种子程序

  • 我试图在一次迁移时在主键中做一个外键。 这是为Laravel 5.7。我尝试了不同的方法来实现我的目标。这是我的最终代码。 它生成一个普通表,其中“user_id”作为主键,但它不是外键。

  • 问题内容: 我有下表,其中的表是空的,我正在尝试填充: 要填充的源数据是我从外部CSV文件填充的临时表: 我想做的是用中的值填充。该字段可以直接复制,但是我不太确定如何获取正确的内容(可以使用tmp_table.langname确定language.id)和(tmp_table.tplname,tmp_table.source,tmp_table.domain一起使用)确定template.id)

  • 我想收集键盘输入并将其附加到java StringBuilder中,但使用LWJGL的键盘事件,我最终获取了比我希望的更多的内容,如Shift、CapsLock、Escape、F1到F12、Enter,甚至标点符号等。。这些键也有键ID,但通过附加它们,它们被打印成正方形(我相信是无法识别的字符)。 我的目标是忽略这些不可打印的键,而不必创建包含所有这些不需要的键的巨大阵列。有什么办法吗? 请注意

  • 本文向大家介绍Spring Data JPA 建立表的联合主键,包括了Spring Data JPA 建立表的联合主键的使用技巧和注意事项,需要的朋友参考一下 最近遇到了一个小的问题,就是怎么使用 Spring Data JPA 建立表的联合主键?然后探索出了下面的两种方式。 第一种方式: 第一种方式是直接在类属性上面的两个字段都加上 @Id 注解,就像下面这样,给 stuNo 和 stuName