从内部调用模型

时间:2015-02-21 19:44:36

标签: php laravel scope

我在laravel中有一个模型,需要在其自身内调用它来检查是否已有条目。这是一个通用(多态)的情况,我不想在控制器中这样做。

这很好用:

$check = self
    ::where('foreign_id',$this->attributes['foreign_id'])
    ->where('foreign_type', $this->attributes['foreign_type'])
    ->where('category', $this->attributes['category'])
    ->orderBy('created_at','desc')
    ->first()
;

现在,我可以使用$ check-> id访问属性。

但我不能这样做:

$check = self
    ::where('foreign_id',$this->attributes['foreign_id'])
    ->where('foreign_type', $this->attributes['foreign_type'])
    ->where('category', $this->attributes['category'])
    ->orderBy('created_at','desc')
;

if($this->isUser()) $check->where('user_id',$this->attributes['user_id']);
else $check->where('guest_ip',$this->attributes['guest_ip']);

$check->first();

它没有在if语句中添加新的wheres到查询。

根据这个答案,我认为自我是可行的方式:https://stackoverflow.com/a/15282754/1233206

在我的情况下,它似乎无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:1)

$check->first()将运行查询并返回结果。 $check变量本身不会更改。所以如果你试试这个:

$check->first();
if($check->id == 'something'){}

它不起作用,因为您正在与查询构建器实例进行交互。你必须这样做:

$check = $check->first();
if($check->id == 'something'){}