Laravel访问反向关系信息

时间:2016-04-12 04:22:53

标签: php laravel

我正在尝试使用Elequent访问父对象的一些信息,但很难弄清楚它是如何工作的。让我们说啤酒属于啤酒厂,啤酒厂有很多啤酒。我有啤酒控制器,模型和视图使用brewery_id来连接两者。我可以通过列出啤酒的啤酒厂页面访问这个关系,所以我知道它们正在配对,但我如何拥有啤酒页面,包含所有啤酒和他们所属的啤酒厂?基本上扭转了我如何获得这种关系。

啤酒厂模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Brewery extends Model
{

    public function Beers(){

        return $this->hasMany(Beer::class);

    }
}

啤酒模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Beer extends Model
{

    protected $table = "Beers";

    public function Breweries() {

        return $this->belongsTo(Brewery::class);

    }
}

啤酒控制器

<?php

namespace App\Http\Controllers;

use App\Beer;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class BeersController extends Controller
{

    public function index() {

        $beers = Beer::all();

        return view('beers.index', compact('beers'));
    }

    public function show(Beer $beer) {

        return $beer;

    }

}

啤酒视图

@extends('layouts.app')

@section('content')

    <div class="container">
        <div class="row">
            <h1>Beers</h1>

            @foreach ($beers as $beer)

                <div>
                    {{ $beer->name }}
                    {{ $beer->brewery->name }}
                </div>

            @endforeach

        </div>
    </div>

@stop

2 个答案:

答案 0 :(得分:0)

我想这会解决你的问题

<强>控制器

class BeersController extends Controller
    {

    public function index() {

        $beers = Beer::with('Breweries')->get();

        return view('beers.index', compact('beers'));
    }

查看:

@section('content')

    <div class="container">
        <div class="row">
            <h1>Beers</h1>

            @foreach ($beers as $beer)

                <div>
                    {{ $beer->name }}
                    {{ $beer->Breweries->name }}
                </div>

            @endforeach

        </div>
    </div>

@stop

答案 1 :(得分:0)

{{ $beer->brewery->name }} change it to {{ $beer->Breweries->name }} 

因为您的关系方法名称是Breweries,或者在Beer模型中将您的方法重命名为brewery。使用小写字母方法