我希望我能正确描述这个主题。我正在创建一个联系人管理应用程序,每个用户在同一个联系人表中都有自己的联系人。用户必须无法看到对方的联系人。
我开始这样做但必须有更好的方法:
$contact = Contact::where('user_id', Auth::user()->id)->find($id);
上面一行的问题是我想这样写:
$contact = Contact::find($id)
有没有办法让where子句以某种方式加载,例如过滤器,以便所有搜索都必须匹配Auth::user()->id
?
答案 0 :(得分:0)
根据建议,您可以使用查询范围。在Contact
模型中添加此内容:
public function scopeOfUser($query, $user_id)
{
return $query->where('user_id', '=', $user_id);
}
然后像这样使用它:$contacts = Contact::ofUser(Auth::user()->id)->get();
。
答案 1 :(得分:0)
我找到了我在laracasts.com上寻找的答案。 (视频:存储库简化)
我通过创建存储库解决了这个问题。例如在我的ContactController中:
$contact = Contact::where('user_id', Auth::user()->id)->find($id);
现在是
$contact = $this->contact->getAll();
DbRepository文件包含:
public function getAll() {
return $this->model->where('user_id', Auth::user()->id)->get();
}
还有更多内容,您需要观看视频才能进行设置。设置起来要做的工作要多得多,但是我的所有控制器都可以使用DbRepository,因为每个表都有一个user_id字段。