【问题标题】:Multiple lookup to the same table in laravel在 laravel 中多次查找同一张表
【发布时间】:2020-09-08 08:57:25
【问题描述】:

我是一个学习 laravel 的初学者,遇到了一个奇怪的问题。我希望一个表引用同一个查找表两次。例如,如果我有一个消息表来存储两个用户之间的消息。

如果我的消息表结构是这样的:

  • id - 无符号(自动递增 pk)
  • 消息 - 字符串
  • user1_id - 未签名
  • user2_id - 未签名

我应该如何设置消息和用户模型,以便在显示消息索引时显示用户表中 user1 和 user2 的 user.email?

如果每条消息只有 1 个用户,我可以将列命名为“user_id”,然后与 users 表建立 belongsTo 关系。

似乎它可能涉及使用 $appends 属性,但是在查询消息表并将这些与消息数据一起发送到视图时,应该如何配置以检索 2 个用户的电子邮件地址?

【问题讨论】:

    标签: laravel eloquent eloquent-relationship


    【解决方案1】:

    有人在 laracasts 论坛上帮助了我,我想我会在这里发布答案以防万一。

    答案是在消息模型中设置额外的关系。喜欢:

    公共函数 userOne() {

      return $this->belongsTo('App\User', 'user1');
    

    }

    公共函数 userTwo() {

      return $this->belongsTo('App\User', 'user2');
    

    }

    然后在视图中,假设您将消息作为 $messages 传递,在 foreach $messages as $message 循环中,使用 optional() 帮助器获取数据,如下所示:

    {{ 可选($message->userOne)->email }}

    【讨论】:

      【解决方案2】:
      public function userOne() {
      
        return $this->hasOne(User::class, 'id', 'user1_id');
      }
      
      public function userTwo() {
      
        return $this->hasOne(User::class, 'id', 'user2_id');
      }
      

      【讨论】:

      • Eloquent ORM 包含一个可以使用的名为belongsTo 的方法。另一种方法是通过扩展您的用户模型来使用Searchable trait。见以下链接:echebaby.com/blog/…
      猜你喜欢
      • 2018-11-25
      • 2016-09-25
      • 1970-01-01
      • 2019-02-21
      • 2014-07-12
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多