我有3个表,"链接"," links_categories"和"用户"我希望允许用户删除链接,但我需要检查链接是否属于用户,这里是我的表格如何工作:
links
----------------
id
category_id
links_categories
----------------
id
user_id
users
----------------
id
我定义了我的关系:
class Link extends Eloquent
{
public function category()
{
return ($this->belongsTo('LinkCategory', 'category_id', 'id')->with('categoryType'));
}
}
class LinkCategory extends Eloquent
{
public function links()
{
return ($this->hasMany('Link', 'category_id'));
}
public function user()
{
return ($this->belongsTo('User'));
}
}
class User extends Eloquent implements UserInterface, RemindableInterface
{
public function linkCategories()
{
return ($this->hasMany('LinkCategory')->with('links', 'categoryType'));
}
}
他们是否可以轻松验证链接属于用户的事实?
感谢。
答案 0 :(得分:1)
如果你想在前面限制删除 - 比如说,在链接列表中,你想只向用户显示属于它们的链接旁边的“删除”按钮 - 那么你可以检查{{ 1}}显示链接时对user_id
。对于每个链接,Auth::user()->id
都可以在user_id
访问,您可以在获取链接列表时使用$link->category->user_id
急切加载。
或者(或者另外),您可以设置一个模型事件侦听器,只要删除链接就会执行此验证。在->with('category')
模型中,设置您的监听器:
links
链接的public static function boot()
{
parent::boot();
static::deleting(function($link)
{
if ($link->category->user_id != Auth::user()->id) {
Session::flash('error', 'delete_unauthorized');
return false;
}
});
}
侦听器将检查用户是否有权删除链接,如果没有,则会返回deleting
(这会阻止删除)并向其发送错误代码如果您需要向用户提供反馈,则可以根据需要处理下一个请求。使用模型事件的一个很好的演练是http://driesvints.com/blog/using-laravel-4-model-events。
您可以使用模型观察器扩展此功能;见http://matthewhailwood.co.nz/laravel-model-validation-using-observers/