Laravel hasOne returns 空对象
Laravel hasOne returns empty object
在我的 Laravel 8 应用程序中有两个模型,User
和 Optout
。我的 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;
}
在我的 Laravel 8 应用程序中有两个模型,User
和 Optout
。我的 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;
}