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

标签 laravel eloquent laravel-5.2

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

|    name    |    value    | validation |
|  site-name | Sample Site |   max:255  |
| site-title | Sample Site |   max:255  |

这是我的设置模型的样子:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
    protected $primaryKey = 'name';
    protected $fillable = ['name', 'value'];
}

以及用于在所有 View 之间共享设置变量的 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);
    }
}

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

Array ( [0] => Sample Site ) instead of: Array ( [site_name] => Sample Site )

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

知道为什么会这样吗?

最佳答案

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

public $incrementing = false;

关于Laravel 5 将字符串主键作为整数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747581/

相关文章:

php - 未设置连接表 created_at 和 updated_at 值

Laravel 5.3 护照自定义授权?

php - Laravel 4 - 自定义错误报告

mysql - 如何返回多对多关系的透视数据?

php - 方法或位置不存在。拉维尔 5.3

php - Eloquent 查找错误的列

php - Laravel:在多对多关系中获取不相关的项目

Laravel Job - 没有为命令注册处理程序

php - Laravel 和时间戳 - 它总是日期列吗?

php - 找不到类 'Illuminate\support\Facades\Redirect' laravel 5.6