我有一张满是Products
的桌子。但是,对于每个用户,只允许一组产品来查看。这是通过表 users_products_permissions 完成的。每个用户都有一个UsersPermissions
表的实例。在此表格中,我设置了一系列要对用户应用的限制,限制说每个产品允许用户“查看”。这是通过user_permission_id
和product_id
组成仅的“弱”(我们称之为brasilian葡萄牙语)表来完成的。
当请求时,请求用户将被记录,当然。
问题取决于:如何根据用户对产品的限制过滤产品?
如果用户模型可以访问此产品,则无需手动签入每个请购单。一种自动的方式,让我们说......
如果需要任何代码,请说出来!
答案 0 :(得分:2)
对于4.2: 使用全局范围来确定整个模型的范围。
http://laravel.com/docs/4.2/eloquent#global-scopes 和 http://softonsofa.com/laravel-how-to-define-and-use-eloquent-global-scopes/
对于4.0: http://www.laravel-tricks.com/tricks/global-scope-model和 Laravel Eloquent Query Builder Default Where Condition
<?php
class Product extends Eloquent {
public function newQuery()
{
return parent::newQuery()->where('permission', '=', 1);
}
}
答案 1 :(得分:1)
您可以使用查询范围。通过范围,您可以轻松地在模型中重复使用查询逻辑。要定义范围,只需在模型方法前加上范围:
class User extends Eloquent {
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
public function scopeWomen($query)
{
return $query->whereGender('W');
}
}
使用查询范围
$users = User::popular()->women()->orderBy('created_at')->get();