从自身内部调用模型

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'){}