Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel ORM关系在Laravel 5.2上返回null_Php_Mysql_Laravel_Laravel 5.2 - Fatal编程技术网

Php Laravel ORM关系在Laravel 5.2上返回null

Php Laravel ORM关系在Laravel 5.2上返回null,php,mysql,laravel,laravel-5.2,Php,Mysql,Laravel,Laravel 5.2,我有两个模型User和UserType声明如下: class User extends Model { protected $table = 'user'; protected $primaryKey = 'user_id'; public function company() { return $this->hasOne('App\Models\Company', 'company_id', 'company_id'); } p

我有两个模型User和UserType声明如下:

class User extends Model {
    protected $table = 'user';
    protected $primaryKey = 'user_id';

    public function company() {
        return $this->hasOne('App\Models\Company', 'company_id', 'company_id');
    }

    public function userType() {
        return $this->hasOne('App\Models\UserType', 'user_type_id', 'user_type_id');
    }
}

class UserType extends Model {
    protected $table = 'user_type';
    protected $primaryKey = 'user_type_id';
}
现在,我使用以下方法查询关系:

User::with('userType', 'company')->all()
奇怪的是,我得到了公司,但userType总是空的。 MySQL查询日志显示Laravel能够获取用户类型记录

公司和用户类型关系之间的唯一区别是主键的数据类型。company.company\u id是数字,而user\u type.user\u type\u id是字符串。
我认为这与键的数据类型有关,但是,我在Laravel 5.1上有类似的设置,它运行得很好。

Laravel支持非数字主键,但您需要设置:

public $incrementing = false;
在你的模型课上。 我通过将UserType定义更改为:

class UserType extends Model {
    protected $table = 'user_type';
    protected $primaryKey = 'user_type_id';
    public $incrementing = false;
}

Laravel支持非数字主键,但您需要设置:

public $incrementing = false;
在你的模型课上。 我通过将UserType定义更改为:

class UserType extends Model {
    protected $table = 'user_type';
    protected $primaryKey = 'user_type_id';
    public $incrementing = false;
}

我注意到的与您的关系有关的第一个问题是,您传递给hasOne函数的第一个user_type_id是错误的,因为您将user_type_id作为user_type表的主键。hasone的第二个参数必须是作为用户的父表的外键。因此,如果在user\u type表中有类似于user\u id的内容,请使用它


但如果情况并非如此,并且user属于UserType,那么您必须将hasOne更改为belongsTo。

我注意到您的关系的第一个问题是,您传递给hasOne函数的第一个user\u type\u id是错误的,因为您将user\u type\u id作为user\u type表的主键。hasone的第二个参数必须是作为用户的父表的外键。因此,如果在user\u type表中有类似于user\u id的内容,请使用它


但如果情况并非如此,并且用户属于UserType,则必须将hasOne更改为belongsTo。

问题确实是我最初猜测的数据类型。请看我的答案。问题确实是我最初猜测的数据类型。看看我的答案。