我正在处理分类广告网站,我会有不同类型的广告。会有汽车,房地产等。所有类型都具有特定于类型的属性。例如,房地产广告将具有汽车不需要的平方米属性。
我为这种情况创建了数据库模型,但不知道如何将这种关系说成雄辩。还有什么更好的方法来解决这个问题吗?
广告表 -ID -日期 -ad_type_id
汽车桌 -ID -标题 -horse_power
房地产表 -ID -标题 -squares
答案 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_car
和ad_realestate
格式化您想要的内容
//car view
$ad->adable->title
$ad->adable->horse_power
这是一个奇怪的概念,它花了我几次尝试才使它正确。我发现https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/10有助于解释在不同视图中显示多态关系的概念(从8:30左右开始)。如果你感到困惑,请仔细看看。