在 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 中多次查找同一张表的主要内容,如果未能解决你的问题,请参考以下文章