Laravel关系在热切负载上显示为空

时间:2019-11-27 19:27:38

标签: php laravel laravel-6

Laravel关系在急切加载时显示为空。但是,当正常访问该关系时,它可以工作。

ArrayList

当我使用以下内容时,合同关系返回null。

class Student extends Model
{
    use SoftDeletes;

    public $incrementing = false;
    protected $primaryKey = 'id'; // or null
    protected $guarded = [];

    public function document()
    {
        return $this->hasOne('App\Model\Document');
    }

    public function contact()
    {
        return $this->hasOne('App\Model\Contact');
    }
}

但是当我执行以下操作时它会起作用。可能是什么原因造成的?

Student::with('contact')->get()

1 个答案:

答案 0 :(得分:0)

Student::with('contact')->get();返回Collection个实例中的Student,您可以循环并访问它们contact

$students = Student::with('contact')->get();
foreach($students AS $student){
  dd($student->contact); 
  // Can be `null` or an instance of `Contact`
}

调用Student::findOrFail($id);时,会得到一个Student的实例,可以直接访问contact

$student = Student::with('contact')->findOrFail($id);
dd($student->contact);
// Again, can be `null` or an instance of `Contact`

with()子句很容易加载,在您尝试访问$student->contact之前不会执行任何操作,但是由于hasOne()的性质,它可能是{{1} }。