gpt4 book ai didi

php - 在记录集的循环内循环

转载 作者:行者123 更新时间:2023-11-29 12:07:00 24 4
gpt4 key购买 nike

仅供引用,我使用的是 Laravel 5。

我有两张 table

users 
id
first name

skills
id
name

和数据透视表

skill_user
skill_id
user_id

如果我在 MySQL 中进行如下选择:

select users.id as id, users.first_name, skills.name from users 
left join skill_user on users.id = skill_user.user_id
left join skills on skill_user.skill_id=skills.id

我得到:

id, first_name, skill
1, Jenna, Reliable
1, Jenna, Organized
2, Alex, Hardworking
3, Barry, Capable
3, Barry, Amiable
3, Barry, Patient
4, Janine, (null)

我通过 Controller 将其传递给 View :

$peoples = [];
$peoples = \DB::table('users')
->select(\DB::raw('users.id as id, first_name, skill.name as name"'))
->leftJoin('skill_user','users.id','=','skill_user.user_id')
->leftJoin('skills','skill_user.skill_id','=','skills.id')
->get();
return view('find-people', compact(['peoples']));

现在,我想在 View 中循环遍历它(伪代码):

forelse ( peoples as people )
people - > first_name
people - > skill
empty
no people found
endforelse

从某种意义上说,这一切都很好 - 但当有多个技能时,第一个名字就会重复。

我可能可以通过将 user_id 与其自身进行比较之类的方法来破解技能循环,但这似乎是一种笨拙的方法。

user_id = $peoples->id
while (some looping criteria)
{
write out skills
if($peoples->id != user_id){break;}
}

如何以优雅/ Eloquent 方式循环遍历记录集?或者有更好的方法来做到这一点吗?

最佳答案

如果您在模型中定义关系,则无需尝试构建原始 SQL 来实现此目的。这就是 Laravel ORM “Eloquent” 的用途!

class People extends Model {
public function skills () {
return $this->hasMany('Skill');
}
}

然后定义技能模型:

class Skill extends Model {
public function People () {
return $this->belongsToMany('People');
}
}

现在您可以迭代 People 模型,并为每个人获取他们的 ->skills。这样您就不会遇到重复的问题,并且可以通过利用 ORM 极大地简化您尝试实现的 SQL。

关于php - 在记录集的循环内循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308571/

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