为什么属性属性使用模型返回空?

时间:2017-08-21 16:14:40

标签: php laravel

我有一个控制器和一个模型。

现在,我想从控制器获取模型的属性,但我无法访问它。这是我的代码:

MODEL

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','role'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function isRole()
    {
        return $this->role; //mysql column role
    }
}

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class HomeController extends Controller
{ 
    public function index()
    {
        $user = new User;
        return $user->isRole(); //this is just to test display the role column. but it returns empty or no value.
    }
}

我还尝试在函数$this->role内回显isRole(),但它又是空的。在我的数据库中,我在role列上插入了值。

我还执行了php artisan migrate以更新数据。

有人帮助我:这里发生了什么?谢谢

2 个答案:

答案 0 :(得分:3)

在您的代码中:

$user = new User;
return $user->isRole();

你从无到有创造用户,所以角色将是垃圾。请尝试以下方法获取表格的第一个用户:

$user = User::firstOrFail();
return $user->isRole();

请注意,如果表为空,firstOrFail将抛出异常。

修改

shukshin.ivan's comment中所述,用户也可以使用where子句进行过滤,如下所示:

$user = User::where('email', $request->email)->first();
return $user->isRole();

答案 1 :(得分:1)

尝试

public function index()
    {
        $user = App\User::find(1);

        return $user->isRole();
    }

您获得空值,因为new User();为空