创建关系的最佳方式是什么,如果它已经不存在,在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
]);
});
答案 0 :(得分:1)
您是否可以假设在创建用户时还需要创建客户?如果你的系统的其余部分依赖于这个假设,我会做一个模型事件。
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
]);
});
}
}