Laravel 显示多对多关系项

fig*_*r20 3 php laravel

我在 Laravel 中建立了多对多关系,并在数据库表中填充了数据。关系设置看起来像这样......

users.php
---------
   public function houses()
    {
        return $this->belongsToMany('App\House')
        ->withTimestamps();
    }

house.php
---------
public function users()
    {
        return $this->belongsToMany('App\User')
        ->withTimestamps();
    }
Run Code Online (Sandbox Code Playgroud)

在我的 /house/show.blade.php 我试图像这样显示保存的连接......

$houses = House::with('App\User')->all();

foreach ($houses as $house) {
    echo 'Found House';
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,说找不到 $houses。我哪里错了?

Mar*_*boc 6

您应该在with方法中指出这种关系,如下所示:

$houses = House::with('users')->get();
Run Code Online (Sandbox Code Playgroud)

还有一件事,最好在控制器中获取房屋并将它们传递给视图:

$houses = House::with('users')->get();
return view('someView')->withHouses($houses);
Run Code Online (Sandbox Code Playgroud)

在视图中这样做:

@foreach ($houses as $house)
    {{ $house->addres }}
@endforeach
Run Code Online (Sandbox Code Playgroud)

要仅获得房屋,用户可以尝试以下操作:

$houses = House::has('users')->get();
Run Code Online (Sandbox Code Playgroud)

并为用户添加一些条件,您可以这样做:

$houses = House::whereHas('users', function ($query) {
    $query->where('name', 'some user name'); // to add some conditions on the user :)
})->get(); 
Run Code Online (Sandbox Code Playgroud)