【发布时间】:2021-08-30 07:24:18
【问题描述】:
我的 User 模型带有 parent_id 列,并且关系定义如下:
public function superior()
{
return $this->belongsTo(self::class, 'superior_id', 'id');
}
public function subordinates()
{
return $this->hasMany(self::class, 'superior_id', 'id');
}
我有这样的测试数据设置:
user1
user2
user5
user3
user4
(意思是user2有parent_id = 1,user5有parent_id = 2)
当我调用 $user2->superior 时,它可以工作(返回 $user1)。但是我调用$user2->subordinates它返回null(应该是一个包含user5的集合)。
我尝试迭代,但结果没有改变。
请帮帮我。
【问题讨论】:
-
我不确定这是否可行,但你可以试试
Model::subordinates()->toSql();之类的东西,看看它是否会打印一条 SQL,以便我们检查它在做什么?另外,如果它不起作用,只需在subordinates()和toSql()之间添加一个where,这样你就可以真正使用它了。 -
@matiaslauriti 它返回“select * from
userswhereusers.superior_id= ? andusers.superior_idis not null”我不确定它的条件如何'不为空'以及如何摆脱它。编辑:似乎“users.superior_idis not null”不影响逻辑,也不是原因(?) -
是的,
is not null因为它是一个关系,所以你永远不会得到null结果(至少对于collections)。你确定user5有superior_id=user2->id吗?请检查您的数据库并运行它返回的相同查询,但在您看到?的地方写入user2->id并检查它是否返回user5。 (请在 MySQL 服务器中手动运行该查询) -
是的,它返回 2。我在这里发布了结果:pastebin.com/5pgJieUm
-
但是,如果你运行那个查询,用正确的 ID 替换
?,在 MySQL 中运行它,你会得到什么回来吗?