Laravel 5种不同的广告类型

时间:2017-02-21 17:01:36

标签: laravel-5 eloquent

我正在处理分类广告网站,我会有不同类型的广告。会有汽车,房地产等。所有类型都具有特定于类型的属性。例如,房地产广告将具有汽车不需要的平方米属性。

我为这种情况创建了数据库模型,但不知道如何将这种关系说成雄辩。还有什么更好的方法来解决这个问题吗?

广告表 -ID -日期 -ad_type_id

汽车桌 -ID -标题 -horse_power

房地产表 -ID -标题 -squares

1 个答案:

答案 0 :(得分:1)

您正在寻找的是“多形态关系”。

如果您按照https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations上的示例操作,只需用他们的表格替换您的表格......

cars
    id - integer
    title - string
    horse_power - integer

realestates
    id - integer
    title - string
    squares - integer

ads
    id - integer
    description - text
    adable_id - integer
    adable_type - string

你可以做你想做的事。所以你只需要做

$ads = Ad::with('adable')->get()

然后是所有广告的集合(包含汽车和房地产)。然后你想要创建3个刀片,比如

ad_list.blade.php
ad_car.blade.php
ad_realestate.blade.php

在您的ads_list视图中,您将拥有类似

的内容
@foreach ($ads as $ad)
  @include('ad_'.snakecase(classbasename($ad->adable_type)))
@endforeach

然后以ad_carad_realestate格式化您想要的内容

//car view
$ad->adable->title
$ad->adable->horse_power

这是一个奇怪的概念,它花了我几次尝试才使它正确。我发现https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/10有助于解释在不同视图中显示多态关系的概念(从8:30左右开始)。如果你感到困惑,请仔细看看。