从自身内部调用模型
Call model from within itself
我在 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 语句中的新位置添加到查询中。
我认为自己是根据这个答案走的路:
但就我而言,它似乎不起作用。我做错了什么?
$check->first()
将 运行 查询和 return 结果。 $check
变量本身不会改变。所以如果你试试这个:
$check->first();
if($check->id == 'something'){}
它不会工作,因为您正在与查询生成器实例进行交互。你必须这样做:
$check = $check->first();
if($check->id == 'something'){}
我在 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 语句中的新位置添加到查询中。
我认为自己是根据这个答案走的路:
但就我而言,它似乎不起作用。我做错了什么?
$check->first()
将 运行 查询和 return 结果。 $check
变量本身不会改变。所以如果你试试这个:
$check->first();
if($check->id == 'something'){}
它不会工作,因为您正在与查询生成器实例进行交互。你必须这样做:
$check = $check->first();
if($check->id == 'something'){}