【问题标题】:User self relationship hasMany (parent/children) return null用户自身关系 hasMany(父/子)返回 null
【发布时间】: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 users where users.superior_id = ? and users.superior_id is not null”我不确定它的条件如何'不为空'以及如何摆脱它。编辑:似乎“users.superior_id is not null”不影响逻辑,也不是原因(?)
  • 是的,is not null 因为它是一个关系,所以你永远不会得到null 结果(至少对于collections)。你确定 user5superior_id = user2->id 吗?请检查您的数据库并运行它返回的相同查询,但在您看到? 的地方写入user2->id 并检查它是否返回user5。 (请在 MySQL 服务器中手动运行该查询)
  • 是的,它返回 2。我在这里发布了结果:pastebin.com/5pgJieUm
  • 但是,如果你运行那个查询,用正确的 ID 替换 ?,在 MySQL 中运行它,你会得到什么回来吗?

标签: laravel eloquent has-many


【解决方案1】:

我的错。这是因为我设置了 $this->user5->superior_id = $this->user2->id 但没有持久化它($this->user5->save())。

按照@matiaslaurit 的建议,我可以找到问题所在: 查看 Model::subordinates()->toSql();Check your DB please and also run the same query it returned

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多