Laravel加入查询混乱

时间:2015-10-28 00:12:48

标签: laravel-5 eloquent

非常新的laravel并尝试做一些简单的事情,但一直陷入困境。我有3张桌子

countries:
    id
    country

regions:
    id
    region
    country_id

wineries:
    id
    winery
    country_id
    region_id 

如下所示:

public function index()
{   
$wineries = Country::join('wineries', 'countries.id', '=', 'wineries.country_id')
    ->join('regions', 'regions.id', '=', 'wineries.region_id')
    ->select('countries.*')
    ->orderBy('countries.country', 'asc')
    ->get() 
    ->unique();
return view('winery.index', compact('wineries'));
}

我试图返回按国家/地区组织的桌子,每个酒庄都与其所在区域一起列出。没有葡萄酒厂的国家不得展示。我的索引页面如下所示:

   <tbody>
        @foreach ($wineries as $country)
        <tr>
            <td colspan="2">{{ $country->country }}</td>
        </tr>
        @foreach ($country->wineries as $winery)
            <tr>
                <td>{{ $winery->winery }}</td> 
                <td>{{ $winery->region }}</td> 
            </tr>   
        @endforeach     
        @endforeach     
    </tbody>

一切运作良好,但我不能为每个酒厂获得相关区域,因为该区域不是$ winery数组的一部分。关于如何使它成为数组的一部分或如何使用不同的查询来完成此任何建议?

2 个答案:

答案 0 :(得分:2)

在laravel中,您可以定义模型的关系。模型表示数据模型(通常与数据库表相关,但并非总是如此)

Laravel使用Eloquent在PHP中定义关系表的数据库。 http://laravel.com/docs/4.2/eloquent#relationships

对于你的情况,听起来你有三个型号 国家 区域 酒厂

您的县将有许多地区,但一个地区只有一个国家。 您所在的地区将有许多葡萄酒厂,但酒庄只有一个地区。

要在Eloquent中规定您的关系,您希望在每个

中编写以下函数
(Country)
    public function regions()
    {
        return $this->hasMany('Region');
    }

(Region)
    public function country()
    {
        return $this->hasOne('Country');
    }

    public function winery()
    {
        return $this->hasMany('Region');
    }

等。

然后,您可以通过模型关联数据。因此,如果您有一个Country对象并希望获得您将要执行的区域

$country->regions

您可能希望将其包装在一个循环中以打印所有区域

foreach($country->regions as $region) {
    echo $region->name;
}

希望这有帮助

答案 1 :(得分:0)

使用模型定义关系。 Laravel拥有雄辩的Eloquent模型。使用它查询数据库非常容易。学习曲线非常值得。

相关问题