测试雄辩关系的存在,如果不存在,则创建


Testing existence of Eloquent relationship and creating if it doesn't exist

如果关系不存在,在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
           ]);
        });
     }
}