Php 用户id和用户名未与关系一起插入
这是乡村模式Php 用户id和用户名未与关系一起插入,php,laravel,Php,Laravel,这是乡村模式 class Country extends Model { protected $guarded = []; public function posts() { return $this->hasManyThrough(Post::class,UserProfile::class,'country_id','user_id','id','user_id'); } } 这是控制器 class UserController ex
class Country extends Model
{
protected $guarded = [];
public function posts()
{
return $this->hasManyThrough(Post::class,UserProfile::class,'country_id','user_id','id','user_id');
}
}
这是控制器
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$users = \App\User::with(['roles','profile'])->get();
return view('dashboard.users.index',compact('users'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
$roles = \App\Role::all();
$countries = \App\Country::all();
return view('dashboard.users.create',compact('countries','roles'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$user = [
'username' => $request->username,
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
];
$user = \App\User::create($user);
$filename = sprintf('thumbnail_%s.jpg',random_int(1, 1000));
if ($request->hasFile('photo'))
$filename = $request->file('photo')->storeAs('profiles',$filename,'public');
else
$filename = "profiles/dummy.jpg";
if ($user) {
$profile = new \App\UserProfile([
'user_id' => $user->id,
'city' => $request->city,
'country_id' => $request->country,
'photo' => $filename,
'phone' => $request->phone,
]);
$user->profile()->save($profile);
$user->roles()->attach($request->roles);
return redirect()->route('users.index');
}
}
这是用户配置文件模型
class UserProfile extends Model
{
protected $guarded = [];
public function user()
{
return $this->belongsTo(User::class,'user_id','id');
}
public function country()
{
return $this->belongsTo(Country::class,'country_id','id');
}
}
@extends('dashboard.layout'))
@节(“内容”)
@csrf
名称
全名
电子邮件
密码
电话
选择国家
@如果(!$countries->isEmpty())
@foreach($国家作为$国家)
{{$country->name}
@endforeach
@恩迪夫
城市
选择角色
@如果(!$roles->isEmpty())
@foreach($roles作为$role)
{{$role->name}
@endforeach
@恩迪夫
轮廓图像
添加新用户
@端部
这是创建视图
我在创建用户并获取此错误SQLSTATE[23000]时已将此代码用于关系:完整性约束冲突:1048列“用户id”不能为空(SQL:insert intouser\u profiles
(user\u id
,city
,country\u id
,photo
,phone
,updated\u at
,created\u at
)值(?,卡拉奇,1,profiles/thumbnail\u 385.jpg,+9231487909842020-02-20 04:49:172020-02-20 04:49:17))试试这个:
您的
用户
型号具有:
public function store(Request $request)
{
$filename = sprintf('thumbnail_%s.jpg', random_int(1, 1000));
if ($request->hasFile('photo'))
$filename = $request->file('photo')->storeAs('profiles', $filename, 'public');
else
$filename = "profiles/dummy.jpg";
$user = \App\User::create([
'username' => $request->username,
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
])->profile()->create([
'city' => $request->city,
'country_id' => $request->country,
'photo' => $filename,
'phone' => $request->phone,
]);
if ($user) {
$user->roles()->attach($request->roles);
return redirect()->route('users.index');
} else {
//redirect to error page
}
}
然后,控制器执行以下操作:
protected $fillable = [
'name', 'email', 'password',
];
这将失败,因为用户名
不可批量分配。如文档所述,将只接受您在$filleble
中明确列出的字段
要使其工作,您需要将用户名
添加到可填充字段列表中:
$user = [
'username' => $request->username,
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
];
$user = \App\User::create($user);
旁注:您为确保在尝试创建配置文件之前创建了用户而设置的测试/错误处理无效。原因是您首先将$user
设置为数组-create()
失败,但$user
仍然是数组。因此,您的测试:
protected $fillable = [
'username', 'name', 'email', 'password',
];
仍然计算为TRUE
。最好使用不同的变量名设置用户数组,例如:
if ($user) {
// $user is an array so this still works
// create user profile
}
或者更简单的是,在一个命令中完成所有操作:
$array = [ ... user values ... ];
$user = \App\User::create($array);
@Hammad有我的回答帮助吗?请看。不需要传递用户ID,因为我们在包装主模型的同时直接创建相关模型。Eloquent将知道根据模型关系声明自动传递用户ID,但用户ID不会插入
if ($user) {
// $user is an array so this still works
// create user profile
}
$array = [ ... user values ... ];
$user = \App\User::create($array);
$user = \App\User::create([
// ... user values ...
]);