如果关系不存在,在Eloquent中,或者至少在中心位置,那么创建关系的最佳方式是什么?
这是我的困境。User
必须具有Customer
模型关系。如果由于某种原因客户记录不存在(一些阻止创建它的错误) - 我不希望在我尝试检索它时它抛出错误,但我也在多个位置请求客户对象,所以我不想测试是否存在所有这些地方。
我想在User
模型中尝试以下方法:
public function getCustomerAttribute($value) {
// check $value and create if null
}
但这对人际关系不起作用,$value
null
.
编辑
我已经在创建用户时创建了一个客户,但是我遇到了未创建并在许多地方导致异常的情况,因此我想回退。
User::created(function($user) {
$customer = Customer::create([
'user_id' => $user->id
]);
});
在创建用户时,您是否可以假设还需要创建客户?如果系统的其余部分依赖于此假设,我将创建一个模型事件。
use App'{User, Customer}; // assuming php7.0
UserServiceProvider extends ServiceProvider
{
/**
* Boot
*/
public function boot()
{
// on a side note, we're using "created" not "creating" because the $user->id needs to exist in order to save the relationship.
User::created(function($user) {
$customer = Customer::create([
'user_id' => $user->id
]);
});
}
}