在 laravel 中多次查找同一张表

Posted

技术标签:

【中文标题】在 laravel 中多次查找同一张表【英文标题】:Multiple lookup to the same table in 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 个用户的电子邮件地址?

【问题讨论】:

【参考方案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/…

以上是关于在 laravel 中多次查找同一张表的主要内容,如果未能解决你的问题,请参考以下文章

避免多次加入同一张表

在同一张表上定义关系 Laravel 5.3

如何在laravel中加入同一张表

与同一张表的关系(多对多?) - Laravel

需要在 Laravel 4 的同一张表中设置一对多关系

Laravel 为 2 列加入同一张表