Laravel 5.2 EagerLoading关系返回null

时间:2016-09-12 19:49:01

标签: php laravel eloquent laravel-5.2 eager-loading

我从4.2升级到Laravel 5.2并遇到一个奇怪的问题,当我在关系上使用Eager Loading时,它会返回null,但我可以手动调用它。

这是我的父母模特:

namespace App\Models\Hours;

class Hours extends Model {

/**
 * Model Setup
 */
protected $table = 'leave_hours';
protected $primaryKey = 'leave_id';
public $timestamps = false;

/**
  * Relationships
*/
public function hoursStatus()
{
    return $this->belongsTo('App\Models\Hours\HoursStatusType', 'leave_status_code');
}

这里是HoursStatusType模型:

<?php

namespace App\Models\Hours;

use Illuminate\Database\Eloquent\Model;

class HoursStatusType extends Model {

    /**
     * Model Setup
     */
    protected $table = 'leave_status_type';
    protected $primaryKey = 'leave_status_code';
    public $timestamps = false;

    /**
      * Relationships
    */
    public function hours()
    {
        return $this->hasMany('App\Models\Hours\Hours');
    }

}

基本上,小时有PTO请求具有状态(即待处理,已批准等)。 HoursStatusType只有4行,属于许多小时请求。

我在小时里做了很大的请求,如:

$requests = Hours::with('hoursStatus')->get();

foreach($requests as $r){
   print_r($r->hoursStatus);
}

当我尝试使用foreach循环打印出来时,hoursStatus关系为空。但是,当我在没有急切装载的情况下打电话时,它很好。自从4.2升级(除了添加命名空间)以来,我唯一改变的是将来自hasOne的hoursStatus关系更改为belongsTo。另外几篇帖子提到改变它应该修复它。没那么多。

我错过了什么吗?谢谢!

1 个答案:

答案 0 :(得分:1)

当PK不是自动增量int时,您应该将public $incrementing = false;添加到模型设置中。