Laravel hasOne returns 空对象

Laravel hasOne returns empty object

在我的 Laravel 8 应用程序中有两个模型,UserOptout。我的 Optout 模型有一个 user_id 列,用户可以通过前端表单创建一个选择退出,该表单用一个带有用户 ID 的条目填充这个 table。

在我的 User 模型上,当我尝试创建关系以获取选择退出时,我得到一个空对象而不是来自我的选择退出的数据?为什么?我错过了什么?

/**
 * The accessors to append to the model's array form.
 *
 * @var array
 */
protected $appends = [
    'has_marketing_optout'
];

/**
 * Determine if the user is currently subscribed or not
 *
 * @return bool
 */
public function getHasMarketingOptoutAttribute()
{
    try {
      return $this->hasOne(Optout::class, 'user_id');
    } catch (\Exception $e) {
      return false;
    }
}

您不需要它的属性。您需要建立关系。

public function output()
{
  return $this->hasOne(Optout::class);
}

然后就可以像$user->output

一样访问了

如果您只需要该关系中的一个字段,您可以定义属性。

/**
 * The accessors to append to the model's array form.
 *
 * @var array
 */
protected $appends = [
    'has_marketing_optout'
];

public function output()
{
  return $this->hasOne(Optout::class);
}


public function getHasMarketingOptoutAttribute()
{
    return $this->output->field_name;
}