首页 > 解决方案 > Laravel 急切加载为空,具有多态关系

问题描述

在我的模型中,我有:

//UserAddress.php

protected $with = ['address'];

public function address()
{
    return $this->morphOne('App\Address', 'addressable');
}

//User.php
public function userAddress()
{
    return $this->hasOne(UserAddress::class);
}

//Address.php
public function addressable() 
{
    return $this->morphTo();
}

但是当我调用dd(auth()->user()->userAddress))地址realtionship时没有加载。它仍然为空。

#attributes: array:4 [
    "id" => "1"
    "user_id" => "1"
    "created_at" => "2018-11-13 10:11:54"
    "updated_at" => "2018-11-13 10:11:54"
  ]
  #original: array:4 [
    "id" => "1"
    "user_id" => "1"
    "created_at" => "2018-11-13 10:11:54"
    "updated_at" => "2018-11-13 10:11:54"
  ]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:1 [
    "address" => null
  ]
  #touches: []
  +timestamps: true

但是,与dd(auth()->user()->userAddress()->get()))关系是急切的加载。

问题是什么?

编辑

这太奇怪了。如果我写auth()->user()->userAddress->address,我会得到 null(不应该是这样)。当我删除时,我protected $with = ['address']; auth()->user()->userAddress->address得到了正确的模型。

标签: laraveleloquent

解决方案


对于 id 字段是字符串的一对一关系,我遇到了同样的问题。一切正常,直到我急切加载连接表(在您的情况下为 user_address)。

在我的情况下,我忘记public $incrementing = false;在连接表中定义,一旦我添加了这个,一切正常。


推荐阅读