我在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
在我的情况下,它似乎无法正常工作。我做错了什么?
答案 0 :(得分:1)
$check->first()
将运行查询并返回结果。 $check
变量本身不会更改。所以如果你试试这个:
$check->first();
if($check->id == 'something'){}
它不起作用,因为您正在与查询构建器实例进行交互。你必须这样做:
$check = $check->first();
if($check->id == 'something'){}