laravel addorupdate()?

x33g5p2x  于 2021-06-25  发布在  Mysql
关注(0)|答案(4)|浏览(301)

下面是我想做的:
我有 users 表和 user_profiles 我正在插入 name , emailusers 表和 phone , address, .... etcuser_profiles table。
我要匹配每一个值,以防止重复的用户,我找到了这个拉威尔方法 addOrUpdate() 但它只适用于一张table。但我必须匹配 user_profiles 也就是说 phone,address .
下面是示例代码

$result = $customer->updateOrCreate([
                    'name' => $request->name,
                    'city_id' => $request->city_id,
                    'area_id' => $request->area_id,
                    'email' => $request->email
                ], [
                    'name' => $request->name,
                    'city_id' => $request->city_id,
                    'area_id' => $request->area_id,
                    'email' => $request->email
                ]);

有没有什么方法可以用拉维技术来实现这一点?
当做

kzmpq1sx

kzmpq1sx1#

如果要检查是否存在具有完全相同数据的用户,则不能使用 updateOrCreate() . 请改为:

$user = User::where('name', $request->name)->where('email', $request->email)->first();
$profile = $user->profile()->where('phone', $request->phone)->where('address', $request->address)->count();
if ($user && $profile) {
    // User exists.
}
xxslljrj

xxslljrj2#

先做一个 relationshipuser 以及 user_profiles 模型式-

public function userProfile()
{
    return $this->hasOne('App\Model\UserProfile','user_id','id');
}

然后在你的 post controller 如你所愿 match 要防止的每个值 duplication 用户的-

$result = User::where('name',$request->name)->where('email',$request->email)
       ->whereHas('userProfile', function($q) use ($request){
            $q->where('city_id'$request->city_id)->where('area_id',$request->area_id)

  )->first();
if(!$result){
     ////your registration here
}
yiytaume

yiytaume3#

你可以用 updateOrCreate 为了你的两个模型的唯一性,我假设电子邮件应该是唯一的,所以首先 updateOrCreate() 方法将检查参数是否存在用户 $request->email 如果没有,则更新,然后创建并返回用户模型示例(在更新/创建两种情况下)
第二 updateOrCreate()UserProfile 将检查是否存在 user_id 然后更新或者添加新行,我想 user_id 将是用户配置文件表中的外键

$user = User::updateOrCreate([
                    'email' => $request->email
                ], [
                    'name' => $request->name,
                    'email' => $request->email
                ]);
UserProfile::updateOrCreate([
                    'user_id' => $user->id
                ], [
                    'user_id' => $user->id,
                    'city_id' => $request->city_id,
                    'area_id' => $request->area_id
                ]);
mrphzbgm

mrphzbgm4#

我建议使用laravel的validator facade。https://laravel.com/docs/5.4/validation#manually-正在创建验证程序
这将检查以确保 users 以及 users_profile 表是唯一的。

$validator = Validator::make($request->all(), [
        'name' => 'required|unique:users|unique:users_profile',
        'email' => 'required|unique:users|unique:users_profile',
    ]);

相关问题