【问题标题】:Laravel Relationship 3 ModelsLaravel 关系 3 模型
【发布时间】:2020-03-07 14:31:57
【问题描述】:

我有 3 个模型用户、校园、用户状态。结构是这样的:

Campus
 - id
 - name
User
 - id
 - name
UserStatus
 - id
 - admission_date
 - current_status
 - user_id
 - campus_id

我想知道特定校园中有多少用户。这是我迄今为止所做的。
用户.php

public function UserStatus()
    {
        return $this->hasOne('App\Models\UserStatus' , 'user_id');
    }

校园.php

public function UserStatus()
    {
        return $this->hasMany('App\Models\UserStatus');
    }

用户状态.php

public function User()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
public function Campus()
    {
        return $this->belongsTo('App\Models\Campus', 'campus_id');
    }

校园与用户的关系是什么?

【问题讨论】:

  • 我知道这并不能真正回答您的问题,但只是好奇:为什么同时有 User 和 UserStatus 表?看起来它们都与单个用户有关,所以不能全部放在 User 表上吗?
  • 我只是在这里显示相关信息。这些表中有很多其他列。由于其他一些关系,我不得不将它们分开。简而言之,这在当时是一种要求。
  • 所以澄清一下,用户属于一个校区,校区有很多用户对吗?
  • 是的,没错

标签: laravel laravel-5 eloquent eloquent-relationship


【解决方案1】:

你可以使用“has-many-through”关系。

请检查以下网址。

https://laravel.com/docs/5.8/eloquent-relationships#has-many-through

【讨论】:

  • 该文件建议`国家 id - 整数名称 - 字符串用户 id - 整数国家 ID - 整数名称 - 字符串帖子 id - 整数 user_id - 整数标题 - 字符串 ` 因为我的第二个没有关系列模型..两个键都在一个模型中
  • 你只能使用 UserStatus::where('campus_id', $particular_campus_id)->count();
  • 所以没有办法访问 $campus->user->count();?
  • 我认为没有必要使用关系。为什么? UserStatus 有 user_id 和 Campus_id 两者。因此,您可以在该表中获得计数。
【解决方案2】:

您可以使用 belongsToMany

我认为你有同样的问题,他在查询中使用 belongsToMany 和 "with" 来解决这个问题,并且有雄辩的 Stack overflow - Counting a many to many relationship

【讨论】:

  • 这也没有解决。我还想返回特定校园的所有用户。因为我也需要这些信息。
  • 我觉得可以查询 UserStatus::where('campus_id',$campusId)->get();然后您可以使用 (each) 遍历每一行,然后使用模型获取用户的名称并存储在集合或数组中
  • 我想知道你先用哪个 laravel 版本。
  • 我使用的是 laravel 5.8
【解决方案3】:

我使用了一个函数:

public function User()
    {
        $users = \App\User::whereHas('UserStatus', function($q){
            $q->where('campus_id', $this->id);
        });
        return $users;
    }

为我工作.. 我希望有更好的方法来建立关系。但现在它的工作。谢谢。

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2023-02-16
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多