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()
onUserProfile
将检查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哈立德·朱奈德:我想我的问题到此结束,谢谢你耐心的解释。