У меня есть модель в 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 = 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();
Это не добавление новых Wheres в заявлении, если в запросе.
Я думал, что сам является способ пойти по этому ответу: https://stackoverflow.com/a/15282754/1233206
В моем случае, однако это, кажется, не работает. Что я делаю не так?
Это внутри статическая функция? – lukasgeiter
Нет, это не так. Это публичная функция. Я делаю что-то вроде $ model = new Model; и затем передаю ему некоторые вещи, которые я - внутри модели - обращаются к атрибутам $ this-> [some_attr]. Тогда я называю это как $ model-> check() – sleepless
Хорошо. В опубликованном вами коде вы ничего не делаете с результатом '$ check-> first()'. Попробуйте '$ check = $ check-> first()' – lukasgeiter