php – Laravel ORM友谊关系,无重复

php – Laravel ORM友谊关系,无重复,第1张

概述用雄辩的方式塑造友谊关系的最佳方式是什么?我的表模式在下面,我想定义一个关系,我可以检索所有的朋友,如下所示. <?phpclass User extends Eloquent {public function friends() { return $this->belongsToMany('User', 'friendships', 'user_id', 'friend_id') 用雄辩的方式塑造友谊关系的最佳方式是什么?我的表模式在下面,我想定义一个关系,我可以检索所有的朋友,如下所示.
<?PHPclass User extends Eloquent {public function frIEnds() {    return $this->belongsToMany('User','frIEndships','user_ID','frIEnd_ID')->orWhere($this->ID,'=','frIEnd_ID');  }}+----+---------+-----------+----------+---------------------+---------------------+| ID | user_ID | frIEnd_ID | state    | created_at          | updated_at          |+----+---------+-----------+----------+---------------------+---------------------+|  1 |       3 |         1 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 ||  2 |       2 |         3 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |+----+---------+-----------+----------+---------------------+---------------------+

当我寻找用户ID为3的朋友时,上面的关系接近工作我得到了用户1和3,但显然我想要1和2.

友谊表

user_ID:请求友谊的用户ID
frIEnd_ID:目标朋友的用户ID
州:友谊是否正在等待,接受或阻止.
created_at和updated_at

我知道有一些解决方案来自Laravel Many to many self referencing table only works one way,我可以从关系的两边检索朋友,但我必须是两行,例如,如果用户1和3是朋友,那么在一行user_ID = 3和frIEnd_ID = 1,在下一行反之亦然. (或者,如果我没有两行,我必须进行两次查询).

您不应该尝试将两行应该转换成一行,但如果您要尝试这样做,那么您绝对不需要两次访问数据库:
select * from users where (user_ID = :user_ID and frIEnd_ID = :frIEnd_ID) or  (frIEnd_ID = :frIEnd_ID and user_ID = :user_ID)

在Laravel中将是:

Users::whereRaw('(user_ID = ? and frIEnd_ID = ?) or (frIEnd_ID = ? and user_ID = ?)',[                $user_ID,$frIEnd_ID,$user_ID]);

你也可以做分组来分组,但这有点复杂.

总结

以上是内存溢出为你收集整理的php – Laravel ORM友谊关系,无重复全部内容,希望文章能够帮你解决php – Laravel ORM友谊关系,无重复所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存