Php 基于相关表值的Laravel addOrUpdate()?

Php 基于相关表值的Laravel addOrUpdate()?,php,mysql,laravel,eloquent,laravel-5.5,Php,Mysql,Laravel,Eloquent,Laravel 5.5,下面是我正在尝试做的事情: 我有用户表格和用户档案表格,我正在用户表格和电话,地址中插入姓名,电子邮件。。。。etc在用户配置文件表中 我必须匹配每个值以防止用户重复,我发现了这个laravel方法addOrUpdate(),但它只适用于一个表。但我也必须匹配用户配置文件值,即电话、地址 下面是示例代码 $result = $customer->updateOrCreate([ 'name' => $reques

下面是我正在尝试做的事情:

我有
用户
表格和
用户档案
表格,我正在
用户
表格和
电话
地址中插入
姓名
电子邮件
。。。。etc
用户配置文件
表中

我必须匹配每个值以防止用户重复,我发现了这个laravel方法
addOrUpdate()
,但它只适用于一个表。但我也必须匹配
用户配置文件
值,即
电话、地址

下面是示例代码

                $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
                ]);
有没有办法用拉威尔技术来实现这一点


关于

如果要检查是否存在具有完全相同数据的用户,则不能使用
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.
}

首先与
用户
用户配置文件
模型建立
关系
-

public function userProfile()
{
    return $this->hasOne('App\Model\UserProfile','user_id','id');
}
然后在您的
post controller
中,按照您想要的
匹配
每个值,以防止
重复
-

$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
}

我建议使用Laravel的Validator Facade

这将检查以确保
users
users\u profile
表的名称和电子邮件字段是唯一的

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

为了唯一性,您可以对两个模型使用
updateOrCreate
,我假设电子邮件应该是唯一的,所以首先
updateOrCreate()
方法将检查参数
$request->email
的用户是否存在,如果不存在则更新,然后创建并返回用户模型实例(在更新/创建两种情况下)

第二个
updateOrCreate()
on
UserProfile
将检查
user\u id
是否存在任何数据,然后更新其他添加新行,我假设
user\u id
将是user profile表中的外键

$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
                ]);

我假设电子邮件应该是唯一的?如果用户数据匹配,但用户配置文件数据不匹配,会发生什么情况???@Sohel0415请参阅我回答中的第二段UserProfile上的第二次更新或创建()将检查是否存在任何用户id数据,然后更新或添加新的row@MKhalid Junaid但我想他想要精确匹配,这意味着,若电子邮件匹配,但其他人不匹配,那个么新记录将被刷新inserted@Sohel0415这就是为什么我首先添加了我的假设,为了唯一性,我假设电子邮件应该是唯一的first@M哈立德·朱奈德:我想我的问题到此结束,谢谢你耐心的解释。