Mysql 如何在laravel中联接两个表并按父表id对它们进行分组?
我有两张桌子: t1:酒店 t2:人 共有5家酒店,每家酒店的人数不同。 我想知道酒店的名字和分配给那家酒店的人的名字。 通过这个查询,我让它重复了酒店的名字,重复的次数和里面有多少人一样多Mysql 如何在laravel中联接两个表并按父表id对它们进行分组?,mysql,laravel,join,Mysql,Laravel,Join,我有两张桌子: t1:酒店 t2:人 共有5家酒店,每家酒店的人数不同。 我想知道酒店的名字和分配给那家酒店的人的名字。 通过这个查询,我让它重复了酒店的名字,重复的次数和里面有多少人一样多 $hotels=DB::table('hotels') ->select('hotels.*','people.name') ->leftjoin('people','people.hotel_id','=','hotel.id') ->get(); return view('hotel
$hotels=DB::table('hotels')
->select('hotels.*','people.name')
->leftjoin('people','people.hotel_id','=','hotel.id')
->get();
return view('hotels', ['hotels' => $hotels]);
在我看来,我有
@foreach($hotels as $h)
$h->hotel_name
@endforeach
hotel_name现在显示4次,与分配给hotel_id的人数相同。
我试过使用group_concat,但这样我只能得到人们的名字
是否有一个小组或其他方法可以帮助我达到我的目标?添加到您的酒店课程中
public function peoples()
{
return $this->hasMany(People::class);
}
在你看来:
@foreach ($hotel->people as $people)
{{ $people->name }}
@endforeach
@foreach($hotels as $hotel)
{{ $hotel->name }}
@foreach($hotel->people as $person)
{{ $person->name }}
@endforeach
@endforeach
添加到您的酒店类
public function peoples()
{
return $this->hasMany(People::class);
}
在你看来:
@foreach ($hotel->people as $people)
{{ $people->name }}
@endforeach
@foreach($hotels as $hotel)
{{ $hotel->name }}
@foreach($hotel->people as $person)
{{ $person->name }}
@endforeach
@endforeach
尝试使用集合的
groupBy
功能:
$hotels=DB::table('hotels')
->select('hotels.*','people.name')
->leftjoin('people','people.hotel_id','=','hotel.id')
->get();
$grouped = $hotels->groupBy('hotel_name');
return view('hotels', ['hotels' => $grouped]);
然后,按如下方式打印:
@foreach($hotels as $key => $h)
Hotel name: {{ $key }}
@foreach ($h as $p)
Person name: {{ $p }}
@endforeach
@endforeach
尝试使用集合的
groupBy
功能:
$hotels=DB::table('hotels')
->select('hotels.*','people.name')
->leftjoin('people','people.hotel_id','=','hotel.id')
->get();
$grouped = $hotels->groupBy('hotel_name');
return view('hotels', ['hotels' => $grouped]);
然后,按如下方式打印:
@foreach($hotels as $key => $h)
Hotel name: {{ $key }}
@foreach ($h as $p)
Person name: {{ $p }}
@endforeach
@endforeach
实际上,您可以使用
group\u concat
和group\u by
实现这一点,如下所示:
select hotels.* ,group_concat(people.name) as people_names
from hotels
left join people on hotels.id = people.hotel_id
group by hotel_name;
使用查询生成器:
$hotels = DB::table('hotels')
->select('hotels.*', DB::raw('group_concat(people.name) as people_names'))
->leftjoin('people','people.hotel_id','=','hotels.id')
->groupBy('hotel_name')
->get();
实际上,您可以使用
group\u concat
和group\u by
实现这一点,如下所示:
select hotels.* ,group_concat(people.name) as people_names
from hotels
left join people on hotels.id = people.hotel_id
group by hotel_name;
使用查询生成器:
$hotels = DB::table('hotels')
->select('hotels.*', DB::raw('group_concat(people.name) as people_names'))
->leftjoin('people','people.hotel_id','=','hotels.id')
->groupBy('hotel_name')
->get();
制作酒店模型并定义关系:
public function people()
{
return $this->hasMany(People::class);
}
我是你的控制器:
$hotels = Hotel::all():
return view('hotels')->with('hotels', $hotels);
在你看来:
@foreach ($hotel->people as $people)
{{ $people->name }}
@endforeach
@foreach($hotels as $hotel)
{{ $hotel->name }}
@foreach($hotel->people as $person)
{{ $person->name }}
@endforeach
@endforeach
制作酒店模型并定义关系:
public function people()
{
return $this->hasMany(People::class);
}
我是你的控制器:
$hotels = Hotel::all():
return view('hotels')->with('hotels', $hotels);
在你看来:
@foreach ($hotel->people as $people)
{{ $people->name }}
@endforeach
@foreach($hotels as $hotel)
{{ $hotel->name }}
@foreach($hotel->people as $person)
{{ $person->name }}
@endforeach
@endforeach
在您的酒店模型中
public function peoples()
{
return $this->hasMany('App\People','hotel_id');
}
在您的控制器中(使用->和('people')来解决问题 在您的视图中
@foreach($hotels as $h)
$h->hotel_name
@foreach($h->peoples as $people)
$people->name
@endforeach
@endforeach
在您的酒店模型中
public function peoples()
{
return $this->hasMany('App\People','hotel_id');
}
在您的控制器中(使用->和('people')来解决问题 在您的视图中
@foreach($hotels as $h)
$h->hotel_name
@foreach($h->peoples as $people)
$people->name
@endforeach
@endforeach
酒店名称:{{$key}}不显示任何内容。同样,在这种情况下,如何获取酒店名称、酒店位置等?使用此选项,您需要选择它们。尝试
dd($grouped);
查看信息的组织方式。这将澄清信息。酒店名称:{$key}不显示任何内容。在这种情况下,如何获取酒店名称、酒店位置等?使用此选项,您需要选择它们。尝试dd($grouped)
查看信息是如何组织的。这会使信息更清晰。那么…你想让酒店名称后面跟一组分配给该酒店的名称,对吗?你是想让你知道如何在MySQL中这样做,但Laravel在碍事吗?@Studio,你能把一个标记为正确,以便人们知道去哪里看吗?那么…你想要酒店名称吗e后面是一组指定给该酒店的名字,对吗?你是说你知道如何在MySQL中实现这一点,但Laravel正在妨碍你吗?@Studio,你能把一个标记为正确的,这样人们就知道去哪里看吗?我建议你阅读。你的例子可能会传播一个坏习惯。我建议你阅读。你的例子可以这是一个坏习惯。