Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在laravel中联接两个表并按父表id对它们进行分组?_Mysql_Laravel_Join - Fatal编程技术网

Mysql 如何在laravel中联接两个表并按父表id对它们进行分组?

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

我有两张桌子: t1:酒店 t2:人

共有5家酒店,每家酒店的人数不同。 我想知道酒店的名字和分配给那家酒店的人的名字。 通过这个查询,我让它重复了酒店的名字,重复的次数和里面有多少人一样多

$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,你能把一个标记为正确的,这样人们就知道去哪里看吗?我建议你阅读。你的例子可能会传播一个坏习惯。我建议你阅读。你的例子可以这是一个坏习惯。