2015-08-23 81 views
1

这更像是如何构建我的数据库的建议。基本上,我有一个模型App\Project和我有另一个模型App\AssetLaravel hasMany with filter

应用程序\项目的hasMany应用程序\资产:

public function assets() { 
    return $this->hasMany('App\Asset'); 
} 

资产是不同的图像和assets表有type列。

因此,在我实际显示项目的页面上,我想要做的是显示一个图像,其中original设置为类型,作为开始/第一个图像,然后让其他人跟进。 (所有的资产都是可选的,不是所有的项目都会有original图片。)

我该如何做到这一点?我应该过滤一个数组,并将original从数组中删除?

回答

1

你可以用Query Scopes来解决你的问题。

一个例子来获得与类型的所有资产original

资产模型:

use Illuminate\Database\Eloquent\Builder; 

public function scopeOfOriginalType(Builder $query) { 
    return $query->where('type', 'original'); 
} 

控制器:

$project = Project::find(1); 
$assets = $project->assets()->ofOriginalType()->get(); 
+0

谢谢你,我需要的! – Bravi

0

一个不太复杂的方法来实现这一目标只用在关系where条款可能是:

public function assets() { 
    return $this->hasMany('App\Asset')->where("type", "original"); 
} 
+0

已尝试此sloution,并像一个魅力工程.. – hendra1