gpt4 book ai didi

php - 如何在 Laravel 中建立表之间的关系?

转载 作者:行者123 更新时间:2023-11-29 01:26:43 25 4
gpt4 key购买 nike

我有如下三个表:

// users
+----+-----------+
| id | user_name |
+----+-----------+
| 1 | Jack |
| 2 | Peter |
| 3 | John |
+----+-----------+

// skills
+----+------------+
| id | skill_name |
+----+------------+
| 1 | PHP |
| 2 | HTML |
| 3 | Laravel |
| 4 | MySQL |
| 5 | jQuery |
+----+------------+

// skill_user
+----------+---------+
| skill_id | user_id |
+----------+---------+
| 2 | 1 |
| 5 | 1 |
| 1 | 2 |
| 2 | 2 |
| 4 | 2 |
+----------+---------+

现在我想获得一个特定用户的所有技能。我可以通过在原始 sql 查询中使用 join 子句来做到这一点:

SELECT s.skill_name
FROM skills s
JOIN skill_user su ON s.id = su.skill_id
WHERE su.user_id = :user_id

/* output (assuming :user_id is 1)
+------------+
| HTML |
| jQuery |
+------------+

好的,没问题。现在我想知道,如何通过在 Laravel 框架的模型中添加一个方法来做到这一点?我想做的就是使用 belongsTo()hasOne()hasMany() 等 ..

最佳答案

要用 Eloquent 的方式做,你需要添加关系。在你的例子中,它是多对多关系,所以在 User.php 中,添加这个函数来声明关系:

public function skills() {
$this->belongsToMany(\App\Skill::class, 'skill_user', 'user_id', 'skill_id');
}

然后,

像这样访问它以预先加载它:

$users = \App\User::with('skills')->get();

假设您有一个用户,

$user = User::where('id', 1)->first(); // Get the user with id = 1 

并为该用户获得技能:

$user->skills;

如果你不想使用 Eloquent 方式,你可以使用 Query Builder .请注意,使用此方法,您基本上是手动加入它,因此您不需要向模型添加任何方法:

 \DB::table('users') 
->join('skill_user', 'skill_user.user_id','=', 'users.id')
->join('skills', 'skill_user.skill_id', '=', 'skills.id')
->select('*')
->where('users.id', 1)
->get();

关于php - 如何在 Laravel 中建立表之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com