Laravel 5将字符串主键作为整数返回

Dan*_*iel 0 laravel eloquent laravel-5.2

我的数据库中有一个设置表,如下所示:

|    name    |    value    | validation |
|  site-name | Sample Site |   max:255  |
| site-title | Sample Site |   max:255  |
Run Code Online (Sandbox Code Playgroud)

这就是我的Setting模型的样子:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
    protected $primaryKey = 'name';
    protected $fillable = ['name', 'value'];
}
Run Code Online (Sandbox Code Playgroud)

以及用于在所有视图中共享设置变量的Controller.php文件:

<?php

namespace App\Http\Controllers;

use App\Setting;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Auth;

class Controller extends BaseController
{
    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;

    protected $usr;
    protected $settings;

    public function __construct()
    {
        $this->usr = Auth::user();
        view()->share('usr', $this->usr);

        $this->settings = array();
        $allSettings = Setting::all();

        foreach ($allSettings as $setting)
            $this->settings[$setting->name] = $setting->value;

        print_r($this->settings);

        view()->share('settings', $this->settings);
    }
}
Run Code Online (Sandbox Code Playgroud)

print_r用于调试.出于某种原因,print_r输出:

数组([0] =>示例站点)而不是:数组([site_name] =>示例站点)

看起来$ setting-> name返回一个整数而不是一个字符串(数据库中的name列设置为varchar).

任何想法为什么会发生?

Him*_*val 6

如果它不是整数用在模型中

public $incrementing = false;
Run Code Online (Sandbox Code Playgroud)