我有用户表,使用hasOne关系链接到设置表。 我正在使用每个用户注册的默认值保存这些设置,以后可以更改。 但有没有办法我不必在数据库中保存这些默认值,如果数据库中不存在设置,只需通过模型返回这些默认设置。
答案 0 :(得分:0)
您可以尝试使用Model的访问器方法。
在你的模型中试试这个。
$default; //Define your default setting
public function getSettingAttribute($value) {
$setting = $this->setting()->first();
return ($setting!=null) ? $setting : $default;
}
答案 1 :(得分:0)
以下是我添加到用户模型的代码。现在我可以通过设置访问器获取所有设置。如果保存在数据库中,它将返回关系中定义的默认表中的关系,如果不在数据库中,它将创建与我们希望它们返回的默认属性的完整关系,如设置属性例如,名称为 someSettingName 。
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = ['settings'];
/**
* RETURN the settings of user.
*
* @param int $id
* @return string
*/
public function getSettingsAttribute()
{
// if no relation in db then build it
if ($this->defaults === null)
{
// get the real relation
$defaults = $this->defaults()->getRelated();
// get the foreign key
$foreignKey = $this->defaults()->getPlainForeignKey();
// set foreign key
$defaults->{$foreignKey} = $this->getKey();
// set the settings object's properties here
$defaults->someSettingName = 0;
// result to be completely same as real collection :-)
$defaults->created_at = '2016-10-11 00:00:00';
$defaults->updated_at = '2016-10-11 00:00:00';
// now set the relation query
$this->setRelation('defaults', $defaults);
}
return $this->defaults;
}
/** Get the settings of the user. */
public function defaults()
{
return $this->hasOne('App\Models\Defaults');
}