测试Eloquent关系的存在并创建它是否不存在

时间:2016-02-25 17:20:05

标签: php laravel eloquent

创建关系的最佳方式是什么,如果它已经不存在,在Eloquent中,或者至少是一个中心位置。

这是我的困境。 User必须具有Customer模型关系。如果由于某种原因,客户记录不存在(一些阻止它被创建的错误) - 我不希望它在我尝试检索它时抛出错误,但我也在多个位置请求客户对象,所以我不想在所有这些地方测试存在。

我想在User模型中尝试以下内容:

public function getCustomerAttribute($value) {
        // check $value and create if null
    }

但这对关系无效,$valuenull

修改

我已经在用户创建时创建了一个客户,但是我遇到了一个没有创建并在很多地方引起异常的情况,所以我想要回退。

User::created(function($user) {
           $customer = Customer::create([
               'user_id' => $user->id
           ]);
        });

1 个答案:

答案 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
           ]);
        });
     }
}