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

拉威尔外键关系

彭礼骞
2023-03-14

我有一个奇怪的问题。

我有一个用户表和一个公司表。一个用户属于一家公司,而一家公司有许多用户。

表的两个主键都是id。

在laravel文档中,我阅读了以下内容:

此外,Eloquent假设外键的值应该与父项的id列匹配。

我在我的公司模型中有这个:

protected $table = 'company';

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

当我尝试这个:

$users = CompanyModel::find(1)->users;
dd($users);

它不起作用了。当我在关系中添加外键时,它会起作用!?:

protected $table = 'company';

public function users()
  {
     return $this->hasMany(UserModel::class, 'id');
  }

这很奇怪对吧?我到底做错了什么?

--编辑--

在我的users表中,我有一个company\u id列!


共有1个答案

仇浩旷
2023-03-14

首先,我建议您将模型从CompanyModel重命名为Company,并从UserModel重命名为User

然后确保您的用户表中有company_id。在您的用户迁移文件中,将用户表与公司表连接如下:


    $table->integer('company_id')->unsigned();
    $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');

不要忘记刷新数据库。

然后在你的模型中,定义这样的关系:


    // User model
    // Laravel will automatically identify and use the `company_id` field in your reference
    public function company(){
       return $this->belongsTo(Company::class);
    }

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

然后,您可以在控制器中提取记录,如下所示:


    $user = User::find(1);

    $user_company = $user->company; // This might not be necessary in your controller, you can do it in your view

    dd($users, $user_company);

 类似资料:
  • 我的情况是,我有帖子、用户和评论。 每个评论都存储一个post_id和一个user_id。我要做的是获取用户对特定帖子的所有评论,这样我就可以进行如下调用: (我知道x是什么) 我有: 我觉得需要有一个where或have或where have或是什么东西。。我能做的最好的事情就是拉Auth::User()-

  • 是否还要向findForPassport添加或传递1个变量? 在默认的laravel passport登录中,我只能传递2个变量(用户名、密码),但我想再传递1个变量,并在findForPassport中检查该用户是否属于其他表。

  • 我目前正在研究构建SaaS构建管理工具。我想知道的是,如果我使用laravel passport作为api令牌,我如何为用户分配角色,例如: SuperAdmin:可以创建项目|可以创建新用户并为用户分配角色。 管理员:可以查看项目。 因为我希望能够根据用户权限隐藏前端上的元素。 例如,如果我使用传统的laravel应用程序,我可以使用委托和刀片指令@role('admin')来显示基于用户权限类

  • 是否有一种方法可以将范围添加到BelongsTo很多字段,以便在附加相关模型时只能从受限选项中执行此操作? 例子: 发布物品到许多标签(使用Sploe/Laravel-Tags)。标签属性到许多帖子。 标签模型具有id、名称、段塞、类型和时间戳属性。 在细节或更新视图上,我希望能够将标签附加到Post。 使用Post资源上的默认BelongToMany字段(或第三方包),我可以向Post添加标记。

  • 我对拉威尔望远镜的部分有点困惑。 我有一个用户模型和表。 如何为用户分配用户、客户和/或管理员的角色。 我有一个带有vue和laravel api后端的水疗中心。我用https://laravel.com/docs/5.3/passport#consuming-使用javascript创建api 我如何分配哪个用户模型具有哪些作用域? 还是范围与角色不同? 您将如何实现这一点? 提前谢谢!

  • 我对Laravel截断的数据有一个小问题。我将传递给我的后端值,该值可以是表中定义的“百分比”或“金额”,但在表中也可以为null,但每次尝试将其设置为null时,都会出现如下错误: {"discount_currency":["您输入的值无效。"]} 或者当我从处理请求中删除enum时,它会说 所以我传递数据抛出API从我的Vue,这个婴儿车的请求看起来像: 所以如果我删除...我有第二个错误。