Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 23.10.2012 18:03:58

Call to a member function results() on a non-object

Продолжаю сражаться со всякими, призрачными хренями. Вот, изловил очередную хрень.
Есть табличка юзера, в ней все стандартно + есть поле status, которое при регистрации принимает значение inactive и поле last_visit. Есть контроллер Auth, который ловит ajax запрос на авторизацию и соответственно при успешном прохождении делает вот так:

PHP
if (Auth::attempt($credentials)) {
    try {
        
$user User::find(Auth::user()->id);
        
$user->last_visit date('Y-m-d H:i:s'time());
        
$user->save();
        echo 
'success';
    } catch (
Exception $e) {
        echo 
'error';
        exit;
    }
}

Все нормально, last_visit записан, JS редиректит на страницу дэшбоарда. Там ее ловит контроллер с методом, типа:

PHP
public function action_index() {
    
$uid Auth::user()->id;
    if (
Auth::user()->status === 'inactive') {
        try {
            
$user User::find($uid);
            
$user->status 'active';
            
$user->save;
            echo 
"New";
        } catch (
Exception $e) {
            
print_r($e->getMessage());
        }
    } else {
        echo 
"Again";
    }
}

и тут вылазит хрень:

xmlUnhandled Exception
Message:
Call to a member function results() on a non-object
Location:
(censored)\laravel\database\eloquent\model.php on line 688

и хоть так, хоть сяк (через сеттер в модели), все один результат. При этом занчение поля status — изменено на active. Voodoo magic?

Не в сети

#2 23.10.2012 20:01:39

Re: Call to a member function results() on a non-object

Пока писал пост на официальный форум Laravel, нашел ошибку. Какой ужОс, пора завязывать с работой больше 10 часов…

Изменено John (23.10.2012 20:03:46)

Не в сети

#3 23.10.2012 20:18:27

Re: Call to a member function results() on a non-object

  1. Какой ужОс, пора завязывать с работой больше 10 часов…

Особенно если нет настроения ☺

Блок обновления можно заменить на один (если в модели не установлен PHP$accessible):

PHP
User::update($uid, array('status' => 'active'));

А ещё лучше так:

PHP
Auth::user()->update(array('status' => 'active'));

Предварительно надо проверить, что кто-то авторизован, иначе будет ошибка при вызове метода на null.

Не в сети

#4 23.10.2012 20:29:02

Re: Call to a member function results() on a non-object

Ага, так лучше, к тому же исчезает лишний запрос в базу, только айдишку все равно требуют подставить:

PHP
Auth::user()->update(Auth::user()->id, array('status' => 'active'));

спасибо.

Не в сети

#5 23.10.2012 22:57:36

Re: Call to a member function results() on a non-object

  1. только айдишку все равно требуют подставить

Да, я ошибся:

PHP
Auth::user()->fill(array('status' => 'active'))->save();

Не в сети

Подвал раздела